我嘗試(如下圖)失敗:WPF變化按鈕內容
<Canvas x:Key="Lock" ... /> <Canvas x:Key="Unlock" ... /> <Style x:Key="LockButtonStyle" TargetType="{x:Type Button}"> <Style.Triggers> <DataTrigger Binding="{Binding Path=IsReadOnly}" Value="True"> <DataTrigger.Setters> <Setter Property="Content" Value="{StaticResource Lock}" /> </DataTrigger.Setters> </DataTrigger> <DataTrigger Binding="{Binding Path=IsReadOnly}" Value="False"> <DataTrigger.Setters> <Setter Property="Content" Value="{StaticResource Unlock}" /> </DataTrigger.Setters> </DataTrigger> </Style.Triggers> </Style> ... <Button Content="{StaticResource Lock}" />
我試圖讓按鈕更改當在視圖模型的變化IsReadOnly屬性(它觸發INotifyPropertyChanged.PropertyChanged與「IsReadOnly」作爲PropertyName)。我錯過了什麼?
.NET 3.5
的答案(至少對我來說 - 不支持一般情況):
我只是寫了一個快速轉換的布爾屬性的綁定。
[ValueConversion(typeof(bool), typeof(object))] public class BooleanValueConverter : IValueConverter { public object FalseValue { get; set; } public object TrueValue { get; set; } #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (bool)value ? this.TrueValue : this.FalseValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return object.Equals(this.TrueValue, value) ? true : false; } #endregion } ... <local:BooleanValueConverter x:Key="LockOrUnlock" TrueValue="{StaticResource Unlock}" FalseValue="{StaticResource Lock}" /> ... <Button Content="{Binding Path=IsReadOnly, Converter={StaticResource LockOrUnlock}}" />
什麼做你的意思是「它應該工作」?設置內容是我想要完成的。如果你不能用觸發器來改變它,那麼我就不會看到這是可能的。 – 2010-07-18 14:48:46
觸發器根據IsReadOnly屬性的值設置內容。您無需在按鈕中設置內容。給它的風格LockButtonStyle,看看會發生什麼。 – 2010-07-19 19:07:14