我的情况如下,希望有人能够发现它的用处:
我在一个 WPF 窗口中有一个 ComboBox 控件,我想显示 Brushes 类中的所有颜色。
MainWindow.xaml
在窗口声明中,我已经添加了以下引用:
xmlns:converters="clr-namespace:MyProjectName.Converters"
在 Window.Resources 部分,我已经注册了名为“ColorConverter”的转换器:
<converters:StringToColorConverter x:Key="ColorConverter"/>
在我的XAML代码的某个地方,我已经实现了下拉框:
<ComboBox Grid.Column="1" Grid.Row="3" ItemsSource="{Binding VBColors}"
Margin="5,5,0,5" HorizontalContentAlignment="Stretch">
<ComboBox.ItemTemplate>
<DataTemplate>
<Rectangle Height="20" Fill="{Binding Path=., Converter={StaticResource ColorConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
MainWindow.cs
private List<string> _vbColors = typeof(Brushes).GetProperties().Select(x => x.Name).ToList();
public List<string> VBColors
{ get { return _vbColors; } }
StringToColorsConverter.cs
[ValueConversion(typeof(bool), typeof(SolidColorBrush))]
public sealed class StringToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var stringValue = (string)value;
SolidColorBrush solidColor = (SolidColorBrush)new BrushConverter().ConvertFromString(stringValue);
return solidColor;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
一些提示....
在 ComboBox.ItemTemplate 绑定中,您会发现绑定到“Binding Path =.” =>由于颜色列表不是对象列表而是字符串列表,Binding Path =. 是将控件绑定到字符串名称的方法。
另外...
设置 ComboBox HorizontalContentAlignment="Stretch" 以将矩形拉伸到 ComboBox 宽度...尝试一下,看看有什么区别。
继续编码,
JJ
Drawing.Color
而不是System.String
来填充一个数组。 - User 12345678