Introducción
Ayer publique una entrada en la que hablaba de aplicar un estilo condicional a un control en xaml.
Después de revisar si se puede utilizar StyleSelector o DataTemplateSelector, ambos son válidos a aplicar para un control como el ListBox, pero no por ejemplo para un TextBox o un TextBlock.
Código V2:
Dandole una pequeña vuelta de tuerca, y a pesar que me sigue pareciendo un “Bad Code Smell”, me he creado un nuevo converter:
1: public class BooleanStyleConverter : IValueConverter
2: {
3:
4: public object Convert(object value, Type targetType, object parameter, string language)
5: {
6: var page = new MyXamlPage();
7:
8: return ((bool)value ? page.Resources["StyleA"] as Style : page.Resources["StyleB"] as Style);
9: }
10:
11: public object ConvertBack(object value, Type targetType, object parameter, string language)
12: {
13: throw new NotImplementedException();
14: }
15: }
En el converter se define la pagina donde se encuentran los estilos, y nuestro control, y a través del diccionario de recursos devolvemos un estilo según nuestro condicionante.
Su aplicación en código:
1) Definir el converter en los recursos:
1: <converters:BooleanStyleConverter x:Name="GenderConverter"/>
2) Definir nuestro control con su Binding y Converter:
1: <TextBlock Text="{Binding Child.Name}" Style="{Binding Child.Gender,Converter={StaticResource GenderConverter}}" />
Espero que os sea de utilidad, o si veis alguna opción mejor, lo comenteis
Saludos!