2011-12-21 84 views
1

是否可以创建自定义属性并将其绑定到代码后面的某个值。自定义样式属性 - 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> 

我想要做的是取决于在PersonViewModel类设置IsEditable价值NotEditableText和EditableText模板之间的交换。但我真的不怎么把所有东西都绑在一起。

SOLUTION

<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

你能解释一下你想做什么吗?你的xaml根本没有帮助,我不明白你的问题。你可以绑定到自定义的依赖项属性?当然。你可以在代码中使用绑定吗?当然。我可以添加依赖属性到现有的类吗?种类,搜索附加属性。我可以继续猜测,但... – dowhilefor

回答

0

是的,但你的财产必须是DependancyProperty。否则它不会响应绑定事件。添加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}"所使用的班级中。

+0

我仍然有触发错误: <触发属性=“IsEditable”值=“True”> 无法在类型'系统上找到样式属性'IsEditable'。 Windows.Controls.TreeViewItem”。 – WaZz

+0

原因是因为类TreeViewItem没有IsEditable属性。你有继承这个类吗?你的代码指向一个System.Windows.Controls.TreeViewItem类型,并且你得到的错误是合乎逻辑的。 –

+0

我想在XAML中设置所有样式,然后通过在IsEditable属性上设置true或false,XAML将选择合适的模板。是否有可能实现这一目标? – WaZz

0

如果您只是需要设置通过代码这种风格,你可以使用:

Style containerStyle = (Style)FindResource("ContainerStyle"); 
this.someTreeView.Items[0].Style = containerStyle;