是否可以创建自定义属性并将其绑定到后面代码中的某个值。
<Style TargetType="{x:Type TreeViewItem}" x:Key="ContainerStyle">
<Setter Property="IsEditable" Value="{Binding IsEditable, Mode=TwoWay}" />
<Style.Triggers>
<Trigger Property="IsEditable" Value="True">
<Setter Property="HeaderTemplate" Value="{StaticResource EditableTextBox}" />
</Trigger>
</Style.Triggers>
</Style>
我想要做的是在NotEditableText和EditableText模板之间进行交换,具体取决于PersonViewModel类中设置的IsEditable的值。但我真的不怎么把所有东西绑在一起。
解
<Style TargetType="{x:Type TreeViewItem}" x:Key="ContainerStyle">
<Setter Property="ViewModel:PersonViewModel.IsEditable" Value="{Binding IsEditable, Mode=TwoWay}" />
<Style.Triggers>
<Trigger Property="ViewModel:PersonViewModel.IsEditable" Value="True">
<Setter Property="HeaderTemplate" Value="{StaticResource EditableText}" />
</Trigger>
</Style.Triggers>
</Style>
答案 0 :(得分:0)
如果您只需要通过代码设置此样式,则可以使用:
Style containerStyle = (Style)FindResource("ContainerStyle");
this.someTreeView.Items[0].Style = containerStyle;
答案 1 :(得分:0)
是的,但您的财产必须是DependancyProperty。否则它将不响应Binding事件。添加DependancyProperty非常简单。
public static readonly DependencyProperty IsSpinningProperty =
DependencyProperty.Register(
"IsSpinning", typeof(Boolean),
);
public bool IsSpinning
{
get { return (bool)GetValue(IsSpinningProperty); }
set { SetValue(IsSpinningProperty, value); }
}
创建这样的属性后,您可以在方案中描述的Style.Triggers中使用它。
您的财产必须出现在TargetType="{x:Type MyType}"
。