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:此代碼也適用於我;) –