我的场景如下,我希望有人觉得它有用:
我在 wpf 窗口中有一个 ComboBox 控件,我想显示 Brushes 类中的所有颜色。
主窗口.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>
主窗口.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=。是将控件绑定到字符串名称的方法
另外...设置 te ComboBox HorizontalContentAlignment="Stretch" 用于将 Rectangle 拉伸到 ComboBox 宽度...尝试查看差异。
继续编码,JJ