2013-11-29 2 views
12

असाइन करने के लिए बाइंडिंग का उपयोग करता है मैं एक संबंधित छवि प्रदर्शित करने के लिए एक enum का उपयोग करने की कोशिश कर रहा हूं। इसके लिए मेरे पास एक वैल्यू कनवर्टर है जो एक एनम को सही संसाधन नाम में परिवर्तित करता है। मेरे संसाधन के रूप में निम्नानुसार परिभाषित कर रहे हैं:डब्ल्यूपीएफ स्थिर संसाधन

<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}" /> 

लेकिन यह नहीं, कनवर्टर कहा जाता है करता है और सही मान वापस पारित कर दिया है। सही वाक्यविन्यास क्या है?

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

मैं कनवर्टर में संसाधन वापसी होगी: resourcedictionary के उपयोग के साथ पूरा आवेदन के लिए

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

क्योंकि अपने संसाधनों अब applicationlevel पर परिभाषित कर रहे हैं, कोड अब अपने संसाधन खोजने के लिए और इसे वापस दे देंगे।

+0

बस मेरे कनवर्टर हटा दिया गया है ... लेकिन मैं आपके समाधान का भी प्रयास करने जा रहा हूं। अधिक सहज ज्ञान युक्त – uncletall

+0

अपवाद फेंकना क्योंकि संसाधन एक ही असेंबली में नहीं है .. – uncletall

+0

यह काम नहीं कर सकता है। मुझे यकीन है कि आप इसे दूसरे कोड के साथ काम करने के लिए प्राप्त कर सकते हैं, लेकिन अगर उपर्युक्त उत्तर काम करता है, तो मुझे इसका उपयोग करना चाहिए ;-) –

5

आप StaticResource कुंजी को नहीं बांध सकता के रूप में यह DependancyProperty नहीं है:

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

पूर्णता के लिए, यह परिवर्तित कार्य है। या तो converter का उपयोग करके आपको Source को सीधे enum पर बांधना होगा और Bitmap को वापस करने के लिए कनवर्टर कोड अपडेट करना होगा।

enum मान के आधार पर Source संपत्ति सेट करने के लिए दूसरा विकल्प Triggers का उपयोग करना होगा।

<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

संबंधित मुद्दे