我尝试(如下图)失败: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