2012-12-17 35 views
68

Sabit arka plan görüntüsüne sahip bir düğme var ve bunun üzerine küçük bir yer paylaşımlı görüntü göstermek istiyorum. Hangi bindirme görüntüsünün seçileceği, ilgili viewmodel'in bir bağımlılık özelliğine (LapCounterPingStatus) bağlıdır.datatrigger resim

Bu defa ne var: Şu anda benim ViewModel

public class ConfigurationViewModel 
{ 
    public enum PingStatus { PING_UNKNOWN, PING_SUCCESS, PING_FAILURE }; 

    public PingStatus LapCounterPingStatus 
    { 
     get { return _lapCounterPingStatus; } 
     set 
     { 
      _lapCounterPingStatus = value; 
      RaisePropertyChanged(LapCounterPingStatusPropertyName); 
     } 
    } 
} 

ait

<Button> 
    <Grid> 
     <Image Stretch="None"> <!-- Background Image --> 
      <Image.Style> 
       <Style TargetType="{x:Type Image}"> 
        <Setter Property="Source" Value="/Images/Pingn.png"/> 
       </Style> 
      </Image.Style> 
     </Image> 
     <Image Stretch="None" Panel.ZIndex="1"> <!-- Small Overlay Image --> 
      <Image.Style> 
       <Style TargetType="{x:Type Image}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="PingStatus.PING_UNKNOWN"> 
          <Setter Property="Source" Value="/Images/RefreshOverlayn.png"/> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="PingStatus.PING_FAILURE"> 
          <Setter Property="Source" Value="/Images/ErrorOverlayn.png"/> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="PingStatus.PING_SUCCESS"> 
          <Setter Property="Source" Value="/Images/CheckmarkOverlayn.png"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Image.Style> 
     </Image> 
    </Grid> 
</Button> 

ilgili kısımlar, hiçbir bindirme görüntüsü görüntülenir. Ne yanlış olabilir? Benim IDE


GÜNCELLEME

İz pencere System.ArgumentException ve System.FormatException gösteriyor. Sorun kaynağı bilinmeyen bir numaralandırma numarası olabilir PingStatus XAML?

+0

İlgili: http : //stackoverflow.com/q/10250925/590790 Bu adam alnı çalışmasına rağmen ady. –

cevap

170

Bu çalışma almak için 2 şey gerekir:

1 - Enum tanımlanır ad, XAML dosyasının kök elemanda bir xmlns referans ekleyin:

<UserControl ... 
xmlns:my="clr-namespace:YourEnumNamespace;assembly=YourAssembly"> 

2 - DataTrigger arasında Value özelliğinde, {x:Static} formu kullanın:

<DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="{x:Static my:PingStatus.PING_UNKNOWN}"> 

Bildirim o E num türünün, yukarıda tanımladığınız xmlns önekiyle öneklenmesi gerekir.

Düzenleme:

Enum sözdizimi kullanmaya gerek bir sınıf içinde bildirilmiş ise: Örneğin

{x:Static namespace:ClassName+EnumName.EnumValue}

:

{x:Static my:ConfigurationViewModel+PingStatus.PING_UNKNOWN}

+0

Bu xmlns'i şöyle ekledim: xmlns: local = "clr-namespace: MyCompany.Testbench" 've bunun gibi bir tetikleyici '. Hayır, 'PingStatus' türünü bulamıyorum. – nabulke

+1

'enum PingStatus',' MyCompany.TestBench.ConfigurationViewModel 'sınıfında tanımlanmıştır. Sınıf adını bir yere eklemek zorunda mıyım? – nabulke

+0

Çözümünüzle çalışır _if_ 'enum PingStatus'u sınıf kapsamı dışına taşıyorum. Niye ya? – nabulke

İlgili konular