我已将我的依赖属性声明如下
public bool CanSave
{
get { return (bool)GetValue(CanSaveProperty); }
set { SetValue(CanSaveProperty, value); }
}
public static readonly DependencyProperty CanSaveProperty =
DependencyProperty.Register("CanSave", typeof(bool), typeof(EditorTabViewModel), new PropertyMetadata(false));
在XAML中,我希望有一个触发器,它根据我的依赖属性的值触发样式。在这种情况下,如果CanSave
为真,则为粗体
<Style x:Key="CanSaveIndicatorHeader">
<Style.Triggers>
<Trigger Property="{Binding CanSave}" Value="True">
<Setter Property="TextBlock.FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
我收到错误
无法设置'绑定' “触发器”类型的“属性”属性。 '绑定'只能在a上设置 DependencyProperty的一个 的DependencyObject。
我可能做错了什么。有人可以纠正我吗?
更新:回应@Bryan Watts
好的,所以我做了类似
的事情<Style.Triggers>
<Trigger Property="vm:EditorTabViewModel.CanSave" Value="true">
<Setter Property="TextBlock.FontWeight" Value="Bold" />
</Trigger>
<Trigger Property="vm:EditorTabViewModel.CanSave" Value="false">
<Setter Property="TextBlock.Foreground" Value="Red" />
</Trigger>
</Style.Triggers>
然后我发现CanSave从未设置为true,然后我做了
<TextBox ... Text="{Binding Path=Content, UpdateSourceTrigger=PropertyChanged}" />
因为内容更改时CanSave设置为true
public string Content
{
...
set
{
if ((bool)GetValue(CanSaveProperty) == false)
{
SetValue(CanSaveProperty, true);
RaisePropertyChanged("CanSave");
}
_content = value;
}
}
但似乎
<Trigger Property="vm:EditorTabViewModel.CanSave" Value="true">
nv发生,因为字体从不是粗体。似乎WPF没有检测到这种变化?
答案 0 :(得分:2)
Trigger
属性只需要属性的名称,而不是绑定它:
<Trigger Property="CanSave" Value="True">
答案 1 :(得分:0)
在您之后定义的触发器中,值应为Value =“True”而不是Value =“true”。
如果定义样式的目标类型,然后使用要绑定的属性,则可以使触发器更简单。就像你的情况一样,你想在TextBlock中应用样式,targettype是TextBlock,为Text属性添加一个值为“True”和“False”的触发器,然后将TextBlock的Text属性与依赖属性绑定(CanSave / Content)
样式,
<Style x:Key="CanSaveIndicatorHeader" TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Text" Value="True">
<Setter Property="TextBlock.FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
结合
<TextBlock Style="{StaticResource CanSaveIndicatorHeader}" Text="{Binding CanSave}"/>
答案 2 :(得分:0)
我发现在某些(可能是全部)情况下,当在样式中使用触发器时,您还需要在触发器之外指定相反的setter:例如:
<Style x:Key="CanSaveIndicatorHeader">
<Setter Property="TextBlock.FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="{Binding CanSave}" Value="True">
<Setter Property="TextBlock.FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>