【发布时间】:2009-09-22 22:55:30
【问题描述】:
我想做以下事情:
<TextBlock Text="{Binding Result}">
我想根据对 Result 的相等性检查为其着色,以视图为中心的方法是什么?我记得读过关于模板选择器的文章,这是正确的选择吗?
示例:
Text="Pass" Color="Green"
Text="Fail" Color="Red"
我希望这是动态的,以便在文本更改时重新评估它。
【问题讨论】:
我想做以下事情:
<TextBlock Text="{Binding Result}">
我想根据对 Result 的相等性检查为其着色,以视图为中心的方法是什么?我记得读过关于模板选择器的文章,这是正确的选择吗?
示例:
Text="Pass" Color="Green"
Text="Fail" Color="Red"
我希望这是动态的,以便在文本更改时重新评估它。
【问题讨论】:
您可以在样式中使用触发器:
<TextBlock Text="{Binding Result}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Result}" Value="Pass">
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding Result}" Value="Fail">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
或者,您可以创建一个 IValueConverter 实现,将字符串转换为画笔(根据您的规则)并直接使用绑定:
<TextBlock
Text="{Binding Result}"
Foreground="{Binding Result,Converter={StaticResource my:ResultBrushConverter}} />
我不会详细介绍此选项,因为我认为纯 XAML 选项是更好的选择。
【讨论】: