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}" />
这只是让我尖叫,我做错了什么。
我认为在你的情况下最好使用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}}" />
了解更多这里