2009-09-28 65 views
14

所以這裏是我試圖做的一點簡單的介紹,我只是要從代碼開始,它很可能是有意義的。DataTrigger on Enums作爲WPF樣式的觸發值

<bl:InnerGlowBorder x:Name="glow" 
        InnerGlowColor="Teal"> 
    <bl:InnerGlowBorder.Style> 
    <Style TargetType="bl:InnerGlowBorder"> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding ViewUnitStatus}" 
        Value="UnitStatusModel.Pass"> 
      <Setter Property="InnerGlowColor" 
        Value="Green" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding ViewUnitStatus}" 
        Value="UnitStatusModel.Fail"> 
      <Setter Property="InnerGlowColor" 
        Value="Red" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding ViewUnitStatus}" 
        Value="UnitStatusModel.Indeterminate"> 
      <Setter Property="InnerGlowColor" 
        Value="Yellow" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding ViewUnitStatus}" 
        Value="UnitStatusModel.Warning"> 
      <Setter Property="InnerGlowColor" 
        Value="Orange" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </bl:InnerGlowBorder.Style> 
</bl:InnerGlowBorder> 

而且枚舉定義:

namespace SEL.MfgTestDev.ESS.ViewModel 
{ 
    public enum UnitStatusModel 
    { 
     Indeterminate, 
     Pass, 
     Fail, 
     Warning, 
    } 
} 

我失去了一塊,使這項工作?我發現了一些關於依賴於對象數據源的枚舉的WPF文章,我不太喜歡這種解決方案,是不是有更簡單的方法可以在這裏做到?

+2

InnerGlowColor =「Teal」問題是,如果由一個樣式設置的字段在基礎中被覆蓋,則觸發器不會改變任何內容。 – Firoso 2009-09-28 18:57:18

+0

+1我正要對此作出迴應。發佈你自己的答案,然後接受它。 :) – 2009-09-28 21:27:56

回答

8

我找到了解決方案,它很愚蠢。

樣式被設計爲控件的一種可視化模板,但它們被設計爲可視化實現的基礎,而不是作爲全部/全部結束視覺模型。

因此,我遇到了一種情況,我的模板規定了InnerGlowColor應該是什麼。但是,通過將InnerGlowColor屬性應用於元素,我創建了覆蓋效果,忽略了我的視覺風格。解決方案是簡單地刪除元素聲明中的依賴屬性。