Principales respuestas
Problema con un Converter

Pregunta
-
Buenas,
he creado un converter para modificar el foreground de un textblock.
public class StringToBrushConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string text = (string)value; switch (text) { case "Rojo": return Colors.Red; case "Azul": return Colors.Blue; default: return Colors.Black; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } }
Lo inserto en el XAML y lo asigno al textbloxck :<phone:PhoneApplicationPage.Resources> <local:StringToBrushConverter x:Name="StringToBrushConverter" /> </phone:PhoneApplicationPage.Resources> <TextBlock x:Name="tbServicio" Text="{Binding Servicio}" Foreground="{Binding Servicio, Converter={StaticResource StringToBrushConverter}}" />
En el momento de meter el Static Resource me da "XAML no válido" al compilar. Y no logro saber por qué es. El textblock está agruado en un grid y también he probado a declararlo dentro de <Grid.Resources> ...</..> pero sigue igual. Logicamente la directiva "<local:StringToBrush...." es correcta. He probado un converter ya hecho de coding4fun declarandolo como recurso en PhoneApplicationPage.Resources y me ha funcionado sin darme error.saludos
- Editado Pedro Net jueves, 27 de octubre de 2011 7:49
Respuestas
-
Puede ser por otra cosa... ¿Has comprobado si el converter funciona? Es posible que debas devolver un Brush, actualmente estás devolviendo un Color, para ello:
new SolidColorBrush(Colors.Red)
Eugenio Estrada @eugenioestrada mail@eugenioestrada.es- Propuesto como respuesta CorsarioVasco jueves, 27 de octubre de 2011 9:25
- Marcado como respuesta Pedro Net jueves, 27 de octubre de 2011 19:15
-
Gracias Eugenio. Al final no ha hecho falta pasarte un ejemplo. Al pasar codigo de la page conflictiva a otro proyecto nuevo me dí cuenta que no daba error y empezé a investigar. Era muy peliagudo el error porque no te daba pista. Al final resulta ser que era porque el asembly name del proyecto tiene espacios en blanco y al compilar en diseño intenta montar el xaml de la clase converter y daba ese fallo tan feo "Invalid xaml".
un abrazo ;)
- Marcado como respuesta Pedro Net jueves, 27 de octubre de 2011 19:15
Todas las respuestas
-
-
¿Tienes el namespace "local" importado en el Root del XAML?
Eugenio Estrada @eugenioestrada mail@eugenioestrada.esSi, cuando pongo el "clr-namespace.." en el xaml , ya me detecta el "Proyecto1".
<phone:PhoneApplicationPage xmlns:local="clr-namespace:Proyecto1">
saludos
- Editado Pedro Net jueves, 27 de octubre de 2011 8:45
-
-
Doy más info. Este textblock está dentro de un grid, que a su vez, está como "content" de un botón y todo esto es un ListBoxItem (Datatemplate).
<ListBox x:Name="lbServicios" Style="{StaticResource ListBoxStyle1}" Foreground="Black" BorderBrush="#00000000" BorderThickness="0" Margin="12,270,12,0" Height="399" VerticalAlignment="Top"> <ListBox.ItemTemplate> <DataTemplate> <Button toolkit:TiltEffect.IsTiltEnabled="True" x:Name="btLista" BorderThickness="0" Width="462" Click="btLista_Click"> <Grid Height="79" Width="418"> <TextBlock x:Name="tbServicio" Text="{Binding Servicio}" Foreground="{Binding Servicio, Converter={StaticResource StringToBrushConverter}}" />
</Grid> </Button> </DataTemplate> </ListBox.ItemTemplate> </ListBox>El error de "Invalid XAML" me lo dá sobre la etiqueta <DataTemplate>. Lo curioso es que la etiqueta <TextBlock> con el converter lo pongo fuera del listbox y no me dá error. Lo meto dentro del DataTemplate y lo dá.
saludos
- Editado Pedro Net jueves, 27 de octubre de 2011 9:09
-
-
-
Puede ser por otra cosa... ¿Has comprobado si el converter funciona? Es posible que debas devolver un Brush, actualmente estás devolviendo un Color, para ello:
new SolidColorBrush(Colors.Red)
Eugenio Estrada @eugenioestrada mail@eugenioestrada.es- Propuesto como respuesta CorsarioVasco jueves, 27 de octubre de 2011 9:25
- Marcado como respuesta Pedro Net jueves, 27 de octubre de 2011 19:15
-
-
-
-
Gracias Eugenio. Al final no ha hecho falta pasarte un ejemplo. Al pasar codigo de la page conflictiva a otro proyecto nuevo me dí cuenta que no daba error y empezé a investigar. Era muy peliagudo el error porque no te daba pista. Al final resulta ser que era porque el asembly name del proyecto tiene espacios en blanco y al compilar en diseño intenta montar el xaml de la clase converter y daba ese fallo tan feo "Invalid xaml".
un abrazo ;)
- Marcado como respuesta Pedro Net jueves, 27 de octubre de 2011 19:15