2013-11-29 2 views
12

해당 이미지를 표시하기 위해 열거 형을 사용하려고합니다. 이를 위해 열거 형을 올바른 리소스 이름으로 변환하는 값 변환기가 있습니다.WPF에서 정적 리소스를 할당하기 위해 바인딩을 사용합니다.

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

그러나 이것은 컨버터가 호출하지 않고 올바른 값이 다시 전달됩니다

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

이 작동 다음과 같이 내 자원 정의된다. 올바른 구문은 무엇입니까? 그것은 DependancyProperty 아니므로

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

내가 컨버터의 자원 반환 : 당신의 계산기에서

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

은 같은 것을 할 :

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

설정 자원을 ResourceDictionary에의 사용과 전체 응용 프로그램에 대한 (app.xaml)

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Dictionary1.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
당신의 사전 (Dictionary1.xaml)에서

자원 이제 applicationlevel에 정의되어 있기 때문에

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

코드는 지금 자원을 발견하고 그것을 다시 줄 것이다.

+0

그냥 내 변환기를 삭제 ...하지만 당신의 솔루션을 시도 할 것입니다. 좀 더 직관적으로 보임 – uncletall

+0

리소스가 같은 어셈블리에 있지 않기 때문에 예외를 throw하는 중 ... – uncletall

+0

보다 많은 리소스가 작동하지 않을 수 있습니다. 위 코드가 작동한다면, 나는 이것을 사용해야한다 ;-) –

5

당신은 StaticResource 키를 바인딩 할 수 없습니다 : 완성도를 들어

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

, 이것은 변환 기능입니다. 어느 쪽이든 converter을 사용하여 Source을 직접 열거 형에 바인딩하고 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

관련 문제