2013-11-29 59 views
12

我想使用枚舉來顯示相應的圖像。爲此,我有一個值轉換器將枚舉轉換爲正確的資源名稱。我的資源定義如下:WPF使用綁定來分配靜態資源

<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> 

這工作:

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

但這不,轉換器被稱爲和正確的值傳遞迴。什麼是正確的語法?

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

爲了完整,這是轉換功能:

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; 
    } 
} 

回答

18

我會回來的轉換器中的資源:與使用資源字典的完整應用

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

設置你的資源:

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

在你的轉換器做這樣的事情(app.xaml)

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Dictionary1.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

在你的字典(Dictionary1.xaml)

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

因爲你的資源,現在的應用級定義的,現在該代碼會發現你的資源,並給它回來。

+0

剛剛刪除了我的轉換器...但我也要嘗試您的解決方案。看起來更直觀 – uncletall

+0

由於資源不在同一個程序集中,因此拋出異常。 – uncletall

+0

它可能不起作用。我相信你可以得到它與其他代碼的一些工作,但如果上述答案的工作,我應該使用;-) –

5

不能綁定StaticResource關鍵,因爲它是不DependancyProperty。您必須使用converter直接將Source綁定到enum,並更新轉換器代碼以返回Bitmap本身。

第二個選項將使用Triggers設置Source屬性,具體取決於enum值。

<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

太棒了,對我很有用! – uncletall