2009-09-28 7 views
14

Oto, co próbuję zrobić w małym skrócie, zacznę od kodu i najprawdopodobniej będzie to miało sens.DataTrigger na Enums jako wartość wyzwalacza w stylu 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> 

a definicja enum:

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

Am I brakuje kawałek do tej pracy? Znalazłem niektóre artykuły WPF na temat wyliczeń, które opierają się na źródłach danych obiektów i nie podoba mi się to rozwiązanie, czy nie ma tu czegoś prostszego?

+2

InnerGlowColor = "Teal" Problem polegał na tym, że jeśli pole ustawione przez styl zostanie przesłonięte w bazie, wyzwalacze niczego nie zmienią. – Firoso

+0

+1 Właśnie miałem odpowiedzieć na ten efekt. Napisz własną odpowiedź, a następnie ją zaakceptuj. :) –

Odpowiedz

8

Znalazłem rozwiązanie i było dość głupie.

Style są zaprojektowane jako rodzaj wizualnego szablonu dla elementu sterującego, ale są zaprojektowane jako podstawa do wizualnej implementacji, a nie jako model wizualny "wszystko/wszystko".

W rezultacie, miałem sytuację, w której mój szablon określał, czym powinien być InnerGlowColor. Jednak, stosując atrybut InnerGlowColor = "Teal" do elementu, stworzyłem efekt "override", ignorując mój styl wizualny. Rozwiązaniem było po prostu usunięcie właściwości zależności w deklaracji elementu.