visual unidades tutorial studio implicita facilito crear conversion codigo clases c# wpf silverlight

unidades - tutorial c# 7



Acceso a colores en un diccionario de recursos desde un convertidor de valores (1)

Definí varios colores en un ResourceDictionary. p.ej:

<ResourceDictionary ...> <Color x:Key=Gray1>#FFF7F1F3</Color> <Color x:Key=Gray2>#FFDDD8DA</Color> </ResourceDictionary>

Así que puedo reutilizarlos en todas partes en la aplicación.

Ahora escribí un convertidor de valores para convertir el estado interno de los artículos al color relacionado.

¿Cómo puedo acceder a los colores definidos en el código del convertidor de valores?

Mi primer pensamiento fue pasar el diccionario como parámetro convertidor. Pero no sé cómo lograr eso.



Saludos

EDITAR

Application.Current.Resources no es una opción. Porque no tendré acceso a eso más tarde.


Lo molesto de usar un parámetro convertidor es que tiene que agregar ese texto cada vez que quiera usar el enlace.

En su lugar, podría convertir el ResourceDictionary en una propiedad de su convertidor y configurarlo cuando cree una instancia del convertidor.

código para el convertidor:

public class SomeConverter : IValueConverter { private ResourceDictionary _resourceDictionary; public ResourceDictionary ResourceDictionary { get { return _resourceDictionary; } set { _resourceDictionary = value; } } public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { //do your own thing using the _dict //var person = value as Person //if (person.Status == "Awesome") // return _resourceDictionary["AwesomeBrush"] //else // return _resourceDictionary["NotAwesomeBrush"]; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }

instanciar y usar el convertidor:

<Window.Resources> <local:SomeConverter x:Key="MyConverter" > <local:SomeConverter.ResourceDictionary> <ResourceDictionary Source="SomeRandomResourceDictionary.xaml" /> </local:SomeConverter.ResourceDictionary> </local:SomeConverter> </Window.Resources> ... <StackPanel Background="{Binding CurrentPerson, Converter={StaticResource MyConverter}}" > </StackPanel>