想要在我的WPF ListView列中获得颜色组合框(参见图片)的行为.有人可以帮我开始吗?我对ListView绑定很满意,但不确定如何实现.编辑:xmlns:System=clr-namespace:System;assembly=mscorlibObjectDataProvider Me...
想要在我的WPF ListView列中获得颜色组合框(参见图片)的行为.
有人可以帮我开始吗?我对ListView绑定很满意,但不确定如何实现.
编辑:
xmlns:System="clr-namespace:System;assembly=mscorlib"
<ObjectDataProvider MethodName="GetValues"
ObjectType="{x:Type System:Enum}"
x:Key="ColorList">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="Windows.Media.Color" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
告诉我所提供的类型必须为枚举.
我发现的最佳答案:
How can I list colors in WPF with XAML?
解决方法:
带有ItemTemplate的ComboBox
您必须为ComboBox项目使用ItemTemplate:
<ComboBox ItemsSource="{Binding NamedColors}"
xmlns:converters="clr-namespace:TestLab.WPF">
<ComboBox.Resources>
<converters:ColorToSolidBrushConverter x:Key="ColorToBrush"/>
</ComboBox.Resources>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Border BorderThickness="0" Height="20" Width="20"
Background="{Binding Value, Converter={StaticResource ColorToBrush}}"/>
<TextBlock Text="{Binding Key}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
电刷转换器
另外,您将需要颜色画笔转换器,因为绑定不会自动完成它:
public class ColorToSolidBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new SolidColorBrush((Color)value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
颜色名称-颜色对创建
这是创建颜色名称-颜色对的方法(当前是主Window类中的一个实例方法,但您可以将其重构为一些帮助器类):
private IEnumerable<KeyValuePair<String, Color>> GetColors()
{
return typeof(Colors)
.GetProperties()
.Where(prop =>
typeof(Color).IsAssignableFrom(prop.PropertyType))
.Select(prop =>
new KeyValuePair<String, Color>(prop.Name, (Color)prop.GetValue(null)));
}
窗口代码
这是窗口:
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.NamedColors = this.GetColors();
this.DataContext = this;
}
public IEnumerable<KeyValuePair<String, Color>> NamedColors
{
get;
private set;
}
}
ObjectDataProvider
一些代码文件:
public namespace SomeNamespace
{
public static class ColorHelper
{
public static IEnumerable<KeyValuePair<String, Color>> GetColors()
{
return typeof(Colors)
.GetProperties()
.Where(prop =>
typeof(Color).IsAssignableFrom(prop.PropertyType))
.Select(prop =>
new KeyValuePair<String, Color>(prop.Name, (Color)prop.GetValue(null)));
}
}
}
XAML对象数据提供程序:
...
xmlns:someNamespace="clr-namespace:SomeNamespace"
...
<ObjectDataProvider MethodName="GetColors"
ObjectType="{x:Type someNamespace.ColorHelper}"
x:Key="ColorList">
</ObjectDataProvider>
XAML comboBox:
<ComboBox ItemsSource="{Binding ColorList}" ...
本文标题为:c#-WPF ComboBox作为System.Windows.Media.Colors
基础教程推荐
- C# SaveFileDialog与OpenFileDialog用法案例详解 2023-04-27
- WPF自定义MenuItem样式的实现方法 2023-01-22
- Unity3d实现跑马灯广播效果 2023-05-12
- 探索 .NET Core 依赖注入的 IServiceCollection 2023-09-27
- asp.net实现遍历Request的信息操作示例 2023-02-09
- C# AttributeUsage使用案例详解 2023-04-28
- c# 三种方法调用WebService接口 2023-03-04
- C#实现简易灰度图和酷炫HeatMap热力图winform(附DEMO) 2023-05-11
- C#实现连接电子秤串口自动称重 2023-06-05
- C# 文件安全管理需要注意的 2023-04-09