WPF combox展示颜色
时间: 2023-09-24 20:09:48 浏览: 101
可以使用 WPF 的 DataTemplate 和 Converter 实现在 ComboBox 中展示颜色。
首先创建一个颜色类,包含颜色名称和对应的颜色值:
```csharp
public class ColorItem
{
public string Name { get; set; }
public Color Value { get; set; }
}
```
然后在 XAML 中定义 ComboBox 的 ItemTemplate 和 SelectedValueTemplate:
```xml
<Window.Resources>
<local:ColorConverter x:Key="ColorConverter" />
<DataTemplate x:Key="ColorTemplate">
<StackPanel Orientation="Horizontal">
<Rectangle Width="20" Height="20" Margin="5"
Fill="{Binding Value}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="SelectedColorTemplate">
<Rectangle Width="100" Height="20" Margin="5"
Fill="{Binding Value}" />
</DataTemplate>
</Window.Resources>
<Grid>
<ComboBox x:Name="ColorComboBox"
ItemTemplate="{StaticResource ColorTemplate}"
SelectedValuePath="Value"
SelectedValueTemplate="{StaticResource SelectedColorTemplate}" />
</Grid>
```
最后定义一个 Converter 将颜色值转换为 Brush:
```csharp
public class ColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Color color)
{
return new SolidColorBrush(color);
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
```
在代码中添加颜色项并绑定到 ComboBox 上:
```csharp
public MainWindow()
{
InitializeComponent();
var colorItems = new List<ColorItem>
{
new ColorItem { Name = "Red", Value = Colors.Red },
new ColorItem { Name = "Green", Value = Colors.Green },
new ColorItem { Name = "Blue", Value = Colors.Blue }
};
ColorComboBox.ItemsSource = colorItems;
}
```
这样,ComboBox 就可以展示颜色了,选中颜色时,会在下拉列表中显示选中的颜色。
阅读全文