2013-11-29 18 views
12

Uygun bir görüntüyü görüntülemek için bir enum kullanmaya çalışıyorum. Bunun için bir enum'u doğru kaynak ismine dönüştüren bir değer dönüştürücüsüne sahibim.WPF, statik kaynak atamak için ciltlemeyi kullanıyor

<Image Source="{StaticResource AlarmCat1}" /> 

Ama bu, dönüştürücü denir vermez ve doğru değer geri döndürülür:

<UserControl.Resources> 
    <BitmapImage x:Key="AlarmCat1" UriSource="/Lib.Infrastructure;component/Resources/msg_cat1.bmp" /> 
    <BitmapImage x:Key="AlarmCat2" UriSource="/Lib.Infrastructure;component/Resources/msg_cat2.bmp" /> 
    <BitmapImage x:Key="AlarmCat3" UriSource="/Lib.Infrastructure;component/Resources/msg_cat3.bmp" /> 
    <converters:JamCategoryToImageConverter x:Key="AlarmCategoryConverter" /> 
</UserControl.Resources> 

Bu işler şu şekildedir: Benim kaynaklarım tanımlanır. Doğru sözdizimi nedir? o DependancyProperty olmadığından

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    switch ((AlarmCategory)value) 
    { 
     case AlarmCategory.Category1: 
      return "AlarmCat1"; 
     case AlarmCategory.Category2: 
      return "AlarmCat2"; 
     case AlarmCategory.Category3: 
      return "AlarmCat3"; 
     default: 
      return null; 
    } 
} 

cevap

18

Ben dönüştürücü içinde kaynak döneceğini: En dönüştürücü olarak

<Image Source="{Binding CurrentAlarmItem.AlarmCategory, Converter={StaticResource AlarmCategoryConverter}}" /> 

böyle bir şey yapmak:

return Application.Current.FindResource("AlarmCat1") as BitmapImage; 

Set kaynaklarınızı ResourceDictionary kullanımı ile komple bir uygulama için (app.xaml)

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Dictionary1.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
senin Sözlük (Dictionary1.xaml) ise

sizin kaynakları artık applicationlevel üzerinde tanımlı olduğu için

<BitmapImage x:Key="AlarmCat1" UriSource="bh.jpg" /> 

, kod şimdi kaynak bulmak ve geri verecektir.

+0

Sadece dönüştürücüm silinmiş ... ama ben de çözümünüzü deneyeceğim. Daha sezgisel görünüyorsun – uncletall

+0

Kaynak aynı mecliste olmadığından istisnalar atın .. – uncletall

+0

Bu işe yaramayabilir. Ben biraz başka bir kod ile çalışmak için alabilirsiniz eminim, ama yukarıdaki cevap çalışıyorsa, ben kullanmalıyım ;-) –

5

Sen StaticResource Key bağlanılamıyor: Bütünlüğü için

<Image Source="{StaticResource { Binding CurrentAlarmItem.AlarmCategory, Converter={StaticResource AlarmCategoryConverter}}}" /> 

, bu dönüştürme işlevidir. Ya Source'u converter kullanarak enum'a bağlamanız ve Bitmap'un kendisini döndürmek için dönüştürücü kodunu güncellemeniz gerekecektir.

İkinci seçenek, enum değerine bağlı olarak Source özelliğinin ayarlanması için Triggers kullanılır.

<Image > 
    <Image.Style> 
     <Style TargetType="{x:Type Image}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding CurrentAlarmItem.AlarmCategory}" 
         Value="Category1"> 
       <Setter Property="Source" Value="{StaticResource AlarmCat1}" /> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </Image.Style> 
</Image> 
+0

Harika, bu benim için çalışıyor! – uncletall

İlgili konular