0
我有一个按钮,并且在一个名为BooleanSwitch的视图模型中有一个布尔属性。XAML样式绑定
我希望按钮的文字和前景色为两种:
- 绿色亮起,当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来定义颜色和文本。
您的代码有效。你有没有设置DataContext?你确定你的OnPropertyChanged是正确实施吗? – LPL
它的工作原理?呵呵。我确定我正确地设置了DataContext,但是一旦我今天下午回家,我会看看OnPropertyChanged。 – Mirek
为什么OnPropertyChanged没有参数?该方法如何知道哪个属性发生了变化? PS:此代码也适用于我;) –