Стоит отметить, что конвертер с ссылками на другие сообщения уже существует , поэтому вы можете сделать <Ellipse Fill="red">
в xaml в первую очередь. Конвертер System.Windows.Media.BrushConverter
:
BrushConverter bc = new BrushConverter();
Brush brush = (Brush) bc.ConvertFrom("Red");
Более эффективный способ - использовать полный синтаксис:
myEllipse.Fill = new SolidColorBrush(Colors.Red);
РЕДАКТИРОВАТЬ в ответ на -1 и комментарии:
Приведенный выше код прекрасно работает в коде , о чем и спрашивал оригинальный вопрос. Вы также не хотите IValueConverter
- они обычно используются для сценариев привязки . TypeConverter
- правильное решение здесь (потому что вы конвертируете строку в кисть в один конец). Подробнее см. в этой статье .
Дальнейшее редактирование (перечитав комментарий Aviad): вам не нужно явно использовать TypeConverter
в Xaml - он используется для вас. Если я напишу это на Xaml:
<Ellipse Fill="red">
... тогда среда выполнения автоматически использует BrushConverter
, чтобы превратить строковый литерал в кисть. Этот Xaml по сути преобразуется в эквивалентную от руки:
<Ellipse>
<Ellipse.Fill>
<SolidColorBrush Color="#FFFF0000" />
</Ellipse.Fill>
</Ellipse>
Итак, вы правы - вы не можете использовать его в Xaml - но вам не нужно.
Даже если у вас есть строковое значение, которое вы хотите связать в качестве заливки, вам не нужно указывать конвертер вручную. Этот тест от 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>
Странно, вы не можете просто использовать StaticResource col
и все еще иметь эту работу - но с привязкой он автоматически использует ValueConverter
, чтобы превратить строку в кисть.