.NET MAUI 如何重用不断重用的 XAML 触发器?

问题描述 投票:0回答:1

MAUI 开发人员还很陌生。我的 MAUI 应用程序中有一种情况,我需要根据布尔值更改许多标签的文本颜色。因此,如果布尔为 true,我希望许多标签从白色切换为灰色。

目前,我的解决方案是超级重复的。我想要一个简单的东西来显示 1 / 4 之类的东西,其中 1 和 4 是两个变量。也许我的做法完全错误,但我还没有找到任何方法来减少这个非常长的 XAML 代码,来做一些我认为非常简单的事情。

我只想让这 3 个字符在布尔值翻转时改变颜色!请记住,我需要在整个应用程序的许多地方进行这种类型的颜色交换。

            <Label Text="{Binding SomeNumber}">
                <Label.Triggers>
                    <DataTrigger TargetType="Label"
                             Binding="{Binding SomeTriggerBool}"
                             Value="True">
                        <Setter Property="TextColor" Value="Grey" />
                    </DataTrigger>
                </Label.Triggers>
            </Label>
            <Label Text="/">
                <Label.Triggers>
                    <DataTrigger TargetType="Label"
                                 Binding="{Binding SomeTriggerBool}"
                                 Value="True">
                        <Setter Property="TextColor" Value="Grey" />
                    </DataTrigger>
                </Label.Triggers>
            </Label>
            <Label Text="{Binding SomeOtherNumber}">
                <Label.Triggers>
                    <DataTrigger TargetType="Label"
                                 Binding="{Binding SomeTriggerBool}"
                                 Value="True">
                        <Setter Property="TextColor" Value="Grey" />
                    </DataTrigger>
                </Label.Triggers>
            </Label>

有什么不同的方法吗?或者至少重用触发代码?如果没有触发器,它看起来像这样:

            <Label Text="{Binding SomeNumber}" />
            <Label Text="/" />
            <Label Text="{Binding SomeOtherNumber}" />

这只是让我尖叫,我做错了什么。

.net xaml data-binding maui datatrigger
1个回答
0
投票

我认为在你的情况下最好使用Converter而不是触发器。

示例:定义如下所示的类

public class BoolToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool isTrue = (bool)value;
        return isTrue ? Colors.Grey : Colors.White;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后将转换器添加到 App.xaml 中,以便您可以在应用程序中的任何位置使用它

 <local:BoolToColorConverter x:Key="BoolToColorConverter" />

您可以像这样使用转换器

 <Label Text="{Binding SomeNumber}" TextColor="{Binding SomeTriggerBool, Converter={StaticResource BoolToColorConverter}}" />
    <Label Text="/" TextColor="{Binding SomeTriggerBool, Converter={StaticResource BoolToColorConverter}}" />
    <Label Text="{Binding SomeOtherNumber}" TextColor="{Binding SomeTriggerBool, Converter={StaticResource BoolToColorConverter}}" />

了解更多这里

© www.soinside.com 2019 - 2024. All rights reserved.