Tra*_*man 2 .net wpf triggers datatrigger
我的尝试(如下)失败了:
<Canvas x:Key="Lock" ... />
<Canvas x:Key="解锁" ... />
<Style x:Key="LockButtonStyle" TargetType="{x:Type Button}">
<样式.触发器>
<DataTrigger Binding="{Binding Path=IsReadOnly}" Value="True">
<DataTrigger.Setters>
<Setter Property="Content" Value="{StaticResource Lock}" />
</DataTrigger.Setters>
</数据触发器>
<DataTrigger Binding="{Binding Path=IsReadOnly}" Value="False">
<DataTrigger.Setters>
<Setter Property="Content" Value="{StaticResource Unlock}" />
</DataTrigger.Setters>
</数据触发器>
</Style.Triggers>
</样式>
...
<Button Content="{StaticResource Lock}" />
我试图让按钮在 ViewModel 上的 IsReadOnly 属性更改时更改(它以“IsReadOnly”作为 PropertyName 触发 INotifyPropertyChanged.PropertyChanged)。我错过了什么?
.NET 3.5
答案(至少对我来说 - 不支持一般情况):
我刚刚为布尔属性绑定编写了一个快速转换器。
[ValueConversion(typeof(bool), typeof(object))]
公共类 BooleanValueConverter : IValueConverter
{
公共对象 FalseValue { 获取;放; }
公共对象 TrueValue { 获取;放; }
#region IValueConverter 成员
公共对象转换(对象值,类型目标类型,
对象参数,CultureInfo 文化)
{
返回(布尔)值?this.TrueValue : this.FalseValue;
}
公共对象 ConvertBack(对象值,类型目标类型,
对象参数,CultureInfo 文化)
{
返回 object.Equals(this.TrueValue, value) ?真假;
}
#endregion
}
...
<local:BooleanValueConverter x:Key="LockOrUnlock"
TrueValue="{静态资源解锁}"
FalseValue="{静态资源锁}" />
...
<Button Content="{绑定路径=IsReadOnly,
Converter={StaticResource LockOrUnlock}}" />