自定义样式属性 - XAML

时间:2011-12-21 17:21:09

标签: c# xaml

是否可以创建自定义属性并将其绑定到后面代码中的某个值。

<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>

2 个答案:

答案 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}"

中使用的班级中