我有一个按钮,并且在名为 BooleanSwitch 的视图模型中有一个布尔属性。
我希望按钮的文本和前景色是:
- 绿色 ON,当 BooleanSwitch 为真时
- 红色关闭,当 BooleanSwitch 为假时
我希望它在值变化时动态变化。
当然,我可以在代码隐藏中做到这一点。但是有没有一个 XAML 解决方案呢?我尝试了以下方法:
<Style x:Key="SwitchButtonStyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=BooleanSwitch}" Value="true">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Content" Value="ON"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=BooleanSwitch}" Value="false">
<Setter Property="Foreground" Value="#00AA00" />
<Setter Property="Content" Value="OFF"/>
</DataTrigger>
</Style.Triggers>
</Style>
<Button Click="button_Click" Style="{DynamicResource SwitchButtonStyle}" />
而点击方法只是:
private void button_Click(object sender, RoutedEventArgs e)
{
BooleanSwitch = !BooleanSwitch;
}
BooleanSwitch 的代码再简单不过了(.NET 4.5):
private bool privateBooleanSwitch;
public bool BooleanSwitch
{
get { return privateBooleanSwitch; }
set
{
if (value == privateBooleanSwitch)
return;
privateBooleanSwitch= value;
OnPropertyChanged();
}
}
加载后,触发器激活并且按钮为红色,但当我单击按钮时,它们不再工作......我可以看到我可能不太了解 DataTriggers 的工作原理。
我究竟做错了什么?
该按钮是一个单一用途的按钮,但我已经发现我不能在特定元素内使用 DataTrigger。我正在考虑创建另一个包含文本和颜色的属性,然后将它们绑定到按钮属性,但这在我看来只是不必要的代码定制,我宁愿使用 XAML 来定义颜色和文本。