Domanda WPF utilizza l'associazione per assegnare una risorsa statica


Sto cercando di usare un enum per visualizzare un'immagine corrispondente. Per questo ho un convertitore di valori che converte un enum al nome della risorsa corretta. Le mie risorse sono definite come segue:

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

Questo funziona:

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

Ma ciò non avviene, il convertitore viene chiamato e viene restituito il valore corretto. Qual è la sintassi corretta?

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

Per completezza, questa è la funzione di conversione:

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

15
2017-11-29 06:00


origine


risposte:


Vorrei restituire la risorsa nel convertitore:

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

Nel tuo convertitore fai qualcosa di simile a questo:

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

Imposta le tue risorse per l'applicazione completa con l'uso di resourcedictionary (app.xaml)

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

Nel tuo dizionario (Dictionary1.xaml)

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

Poiché le risorse sono ora definite su applicationlevel, il codice ora troverà la tua risorsa e la restituirà.


19
2017-11-29 06:58



Non puoi legare il StaticResource Chiave in quanto non è il DependancyProperty. O dovrai legare Source direttamente all'enum usando converter e aggiornare il codice del convertitore per restituire il Bitmap si.

La seconda opzione sarà utilizzata Triggers per impostare il Source proprietà a seconda del enum valore.

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

5
2017-11-29 06:13