2016-09-15 53 views
1

我有一個按鈕樣式。根據是否啓用按鈕,我想更改背景。這看起來是這樣的:用DataTrigger綁定到自我風格

<Style x:Key="MyButtonStyle" TargetType="Button"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=IsEnabled, PresentationTraceSources.TraceLevel=High}" Value="False"> 
      <Setter Property="Background" Value="Purple"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=IsEnabled, PresentationTraceSources.TraceLevel=High}" Value="True"> 
      <Setter Property="Background" Value="Yellow"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

這只是一個基本的例子。其實我需要一個MultiDataTrigger,但它甚至不能使用常規的DataTrigger。我看到的只是一個灰色的按鈕。

這是跟蹤:

System.Windows.Data警告:56:創建BindingExpression(散列= 31767240),用於結合(散列= 6303779)
System.Windows.Data警告:58:路徑:'IsEnabled'
System.Windows.Data Warning:60:BindingExpression(hash = 31767240):默認模式解析爲OneWay
System.Windows.Data警告:61:BindingExpression(hash = 31767240):默認更新觸發器解析爲PropertyChanged
System.Windows.Data警告:62:BindingExpression(hash = 31 767240):附加到System.Windows.Controls.Button.NoTarget(hash = 24311680)
System.Windows.Data Warning:66:BindingExpression(hash = 31767240):RelativeSource(FindAncestor)需要樹上下文
System.Windows。數據警告:65:BindingExpression(hash = 31767240):解決源延遲
System.Windows.Data Warning:67:BindingExpression(hash = 31767240):解析源
System.Windows.Data警告:70:BindingExpression(hash = (確定)
System.Windows.Data警告:73:查找祖先的類型Button:查詢網格(哈希= 35377238)
System.Windows.Data警告:73:查找類型的祖先卜tton:查詢ContentPresenter(hash = 51189900)
System.Windows.Data警告:73:Lookup祖先類型Button:查詢邊框(hash = 48541090)
System.Windows.Data警告:73:查找祖先的類型Button:查詢StartStopControl(哈希= 22721178)
System.Windows.Data警告:查找祖先類型Button:查詢網格(哈希= 32321338)
System.Windows.Data警告:73:類型查找祖先Button:查詢ContentPresenter (哈希= 31184590)
System.Windows.Data警告:查找祖先的類型按鈕:查詢邊框(哈希= 37117888)
System.Windows.Data警告:73:查找祖先的類型按鈕:查詢菜單PanelControl(hash = 873549)
System.Windows.Data警告:73:Lookup祖先類型Button:查詢網格(哈希= 29953511)
System.Windows.Data警告:73:Lookup祖先類型Button:查詢ContentPresenter(哈希= 42576376)
System.Windows.Data警告:查找祖先的類型按鈕:查詢AdornerDecorator(哈希= 66649760)
System.Windows.Data警告:73:查找祖先的類型按鈕:查詢邊框(散列= 23566381)
System.Windows.Data警告:73:按鈕的類型查找祖先:查詢主窗口(散列= 38392424)

它看起來像貫穿整個可視化樹,從放置按鈕的網格開始。它爲什麼不以按鈕開始?

+0

如果我的回答對你有幫助,請將複選框標記爲「答案」,如果你不介意的話。 –

回答

6

你爲什麼不把它改成觸發器?

<Style x:Key="MyButtonStyle" 
      TargetType="Button"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" 
        Value="False"> 
       <Setter Property="Background" 
         Value="Purple" /> 
      </Trigger> 
      <Trigger Property="IsEnabled" 
        Value="True"> 
       <Setter Property="Background" 
         Value="Yellow" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

或者,如果你一定要使用它,你不需要找一個祖先,因爲你目前所在的按鈕:

<Style x:Key="MyButtonStyle" 
      TargetType="Button"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, PresentationTraceSources.TraceLevel=High}" 
         Value="False"> 
       <Setter Property="Background" 
         Value="Purple" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, PresentationTraceSources.TraceLevel=High}" 
         Value="True"> 
       <Setter Property="Background" 
         Value="Yellow" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

如果它不能幫助你,您應該提供更多詳細信息:原始XAML代碼以及您的View Model的代碼。

+0

我需要使用DataTrigger,因爲我也想從ViewModel訪問屬性。當我嘗試你的第二個例子時,Intellisense給了我一個錯誤,但是看起來我可以編譯並運行它。我會看看是否可以重建錯誤。非常感謝。 – gartenriese

+0

它可以工作,但不知何故,Intellisense將其顯示爲錯誤。我想我可以忍受這一點。 – gartenriese

+0

@ Mr.B您的建議使用觸發器,而不是DataTrigger爲我工作。但任何想法爲什麼?謝謝 –