Vale la pena señalar que el convertidor de Referencia los demás puestos ya existe, por lo que se puede hacer <Ellipse Fill="red">
en xaml en primer lugar. El convertidor es System.Windows.Media.BrushConverter
:
BrushConverter bc = new BrushConverter();
Brush brush = (Brush) bc.ConvertFrom("Red");
La forma más eficiente es utilizar la sintaxis completa:
myEllipse.Fill = new SolidColorBrush(Colors.Red);
EDITAR en respuesta a los comentarios y -1:
El código anterior funciona perfectamente bien en el código, que es sobre lo que preguntaba la pregunta original. Usted también no desea quiere un IValueConverter
- éstos se utilizan típicamente para vinculante escenarios. A TypeConverter
es la solución correcta aquí (porque usted está en una sola dirección, convirtiendo una cadena en un pincel). Ver this article para más detalles.
hacer otras modificaciones (habiendo releer el comentario de Aviad): no es necesario utilizar explícitamente la TypeConverter
en XAML - se usa para ti. Si escribo esto en Xaml:
<Ellipse Fill="red">
... entonces el motor de ejecución utiliza un automagicamente BrushConverter
para convertir la cadena literal en un cepillo. Xaml que se convierte esencialmente en la escritura corriente equivalente:
<Ellipse>
<Ellipse.Fill>
<SolidColorBrush Color="#FFFF0000" />
</Ellipse.Fill>
</Ellipse>
Así que tienes razón - no se puede utilizar en Xaml - pero no es necesario.
Incluso si tenía un valor de cadena que desea enlazar como relleno, no necesita especificar el convertidor manualmente. Esta prueba de Kaxaml:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib">
<Page.Resources>
<s:String x:Key="col">Red</s:String>
</Page.Resources>
<StackPanel>
<Ellipse Width="20" Height="20" Fill="{Binding Source={StaticResource col}}" />
</StackPanel>
</Page>
Curiosamente, no se puede simplemente utilizar el StaticResource col
y todavía tiene este trabajo - pero con la que la unión y automáticamente utiliza el ValueConverter
para convertir la cadena en un cepillo.
Esto sería correcto si se convirtiera en un objeto 'Brush' en lugar de un objeto' Color'. Simplemente usar un 'BrushConverter' en lugar de un' ColorConverter' debería hacer el truco. Aunque creo que necesitas una instancia de ese convertidor, el método 'ConvertFromString' no es estático, ¿o sí? –
Si enlaza con un color, puede usar la clase Colors que también tiene intellisense en los nombres de los colores. –
Estos convertidores * ya existen * .... –