XAML颜色标签背景(如果文本为空)

tez616oj  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(120)

我试图在syncfusion数据模板中获取一个标签,以便在属性值为null或空时将背景颜色更改为绿色。它目前不改变背景颜色。
我需要做些什么才能让它工作?
该项目正在Android应用程序上使用Xamarin与同步融合控件。

XAML

<Grid>
....
<Label Text="{Binding MyStringProperty}"  ... >
    <Label.Triggers>
        <DataTrigger TargetType="Label"
                     Binding="{Binding Path=MyStringProperty,TargetNullValue=''}" Value="">
            <Setter Property="BackgroundColor" Value="Green" />
        </DataTrigger>
    </Label.Triggers>
</Label>
</Grid>

C# ViewModel

public nullable<int> myInteger {get;set;}
public string MyStringProperty
{
    get
    {
        if (myInteger=null || myInteger.Value < 1)
            return string.Empty;
        return myInteger?.ToString("n0");
    }
}
1bqhqjot

1bqhqjot1#

我无法在我的代码中实现上述功能,我想是因为Xamarin标签没有处理空标签的触发器。
我想到的解决方案是处理BindingContextChanged事件。

XAML

<Label Text="{Binding MyStringProperty}" BindingContextChanged="Handle_BindingContextChanged" />

代码隐藏

private void Handle_BindingContextChanged(object sender, EventArgs e)
    {
        Label control= (Label)sender;
        if (string.IsNullOrEmpty(control.Text))
        {
            control.BackgroundColor = Color.Green;
        }
        else
        {
            control.BackgroundColor = Color.Transparent;
        }
    }
x4shl7ld

x4shl7ld2#

你可以尝试使用以下代码:

<Label x:Name="label" Text="{Binding MyStringProperty}"  ... >
    <Label.Triggers>
        <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference label}, Path=Text}" Value="{x:Null}">
                <Setter Property="BackgroundColor" Value="Green"/>
            </DataTrigger>
            <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference label}, Path=Text.Length}" Value="0">
                <Setter Property="BackgroundColor" Value="Green"/>
            </DataTrigger>
    </Label.Triggers>
</Label>

当文本值为null时使用第一个datatrigger,当文本值为空时使用第二个datatrigger。

更新:

datatrigger不适用于null值,但适用于空值。

相关问题