以编程方式设置所选项目的颜色的组合框项目 WPF

角色加西亚

我有一个comboBox项目是颜色的地方,我想设置默认的选定项目。

例如在运行时我想将红色设置为所选项目。

我怎样才能做到这一点?我尝试设置SelectedItemSelectedValue但没有运气它们不起作用,我是 WPF 的新手。

这是我的代码。

XAML

<ComboBox x:Name="ComboColor" Width="50" Height="50">
   <ComboBox.ItemTemplate>
      <DataTemplate>
         <StackPanel Orientation="Horizontal">
            <Rectangle Fill="{Binding Name}" Width="16" Height="16" Margin="0,2,5,2" />
            <TextBlock Text="{Binding Name}" />
         </StackPanel>
      </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>

背后的 C# 代码

public MainWindow()
{
   InitializeComponent();
   ComboColor.ItemsSource = typeof(Colors).GetProperties();
   //not working
   ComboColor.SelectedItem = Colors.Red;
   //not working also
   ComboColor.SelectedValue = Colors.Red;
}
克莱门斯

表达方式

typeof(Colors).GetProperties()

返回 a PropertyInfo[],而不是Color实例集合

添加它以将其转换为颜色的 IEnumerable:

ComboColor.ItemsSource = typeof(Colors)
    .GetProperties()
    .Select(p => p.GetValue(null));

要在 XAML 中使用颜色集合而不是 PropertyInfo,请将 ItemTemplate 更改为:

<ComboBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <Rectangle Width="16" Height="16" Margin="0,2,5,2">
                <Rectangle.Fill>
                    <SolidColorBrush Color="{Binding}"/>
                </Rectangle.Fill>
            </Rectangle>
            <TextBlock Text="{Binding}" />
        </StackPanel>
    </DataTemplate>
</ComboBox.ItemTemplate>

但是,此解决方案会丢失颜色名称,并且 ComboBox 将仅显示 #AARRGGBB 值。


创建自己的 ColorInfo 类可能是有意义的

public class ColorInfo
{
    public ColorInfo(PropertyInfo info)
    {
        Name = info.Name;
        Color = (Color)info.GetValue(null);
    }

    public string Name { get; }
    public Color Color { get; }
}

像这样设置 ItemsSource

ComboColor.ItemsSource = typeof(Colors).GetProperties()
    .Select(p => new ColorInfo(p));

并绑定到它

<Rectangle Width="16" Height="16" Margin="0,2,5,2">
    <Rectangle.Fill>
        <SolidColorBrush Color="{Binding Color}"/>
    </Rectangle.Fill>
</Rectangle>
<TextBlock Text="{Binding Name}" />

<ComboBox SelectedValuePath="Name" ...>

你可以写

ComboColor.SelectedValue = "Red";

<ComboBox SelectedValuePath="Color" ...>

这会起作用:

ComboColor.SelectedValue = Colors.Red;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

WPF 组合框中所选项目的模板与复合集合中的项目不同

wpf / mvvm-如何制作一个组合框,以设置mvvm中所选项目的特定值

从枚举绑定的 wpf 组合框中查找所选项目

C#WPF如何修改ComboBox所选项目的颜色?

WPF Textblock文本不会在组合框所选项目上动态更改

在WPF中显示所选列表框项目的数据

如何通过WPF C#中的条件以编程方式禁用组合框的特定项目

WPF组合框项目更新

如何获取非绑定WPF组合框以显示所选项目,而不是{System.Windows.Controls.ComboBoxItem:

wpf 组合框多重绑定无法在第一步中获取相关源组合框的组合框项目(以编程方式添加或绑定到数据库)

WPF ListView所选项目可见

使用WPF中的Value从C#设置组合框项目

WPF 以编程方式创建组合框

在ListView中获取所选项目的信息-WPF / C#

wpf获取列表视图中所选项目的屏幕位置

列表框项目WPF,不同项目的背景颜色不同

JavaFX:样式组合框弹出列表的文本颜色和所选项目的颜色?

如何使用mvvm在WPF列表框中显示所选项目中的数据?

WPF 和 PowerShell:与 ItemTemplate 一起使用时在 ComboBox 上设置所选项目

组合框WPF C#中项目的显示不完整

组合框所选项目

如何在 WPF 中验证 DataGrid 所选项目?

所选项目ComboBox没有显示正确的ID WPF

C# WPF - 所选项目文本被剪切

WPF TreeView所选项目并显示用户控件

WPF在树视图中操纵所选项目

MS Access组合框获取所选项目的值

MVC Kendo组合框所选项目的价值?

在WPF应用程序中以编程方式设置文本框的颜色