2011-12-21 85 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;