【问题标题】:How to show list of main colours not all如何显示主要颜色列表不是全部
【发布时间】:2016-02-19 08:27:41
【问题描述】:

我想让用户有机会选择前景颜色。所以我用

填充了一个组合框
 foreach (PropertyInfo info in typeof(Colors).GetProperties())
      cmbStrokeColour.Items.Add(info.Name);

但这有两个问题,因为它有太多的项目:

  1. 填充时间过长
  2. 让用户感到困惑

有没有办法只列出主要颜色而不是全部。 所以现在的问题是定义主要颜色。我会说这是该列表的一个子集。嗯,不仅是红绿蓝,而且不是上面列表中的 141 项。

感谢您的帮助

【问题讨论】:

  • 正如您已经提到的,您所说的“主色”是一个问题。在您要求编程解决方案之前指定此内容。仅当您明确这一点时,您才可以添加基于 Linqs Where-statement 的实施。
  • “主色”对您意味着什么?您将如何对它们进行分类/识别?另外,你不能使用 Linq 的 Take() 扩展吗?
  • 你的意思是原色和二次色,如红、蓝、绿、黄、品红、青色?黑色和白色呢?甚至是灰色的?
  • 这就是问题所在。在 WinForm 中,我记得不同的颜色集:系统颜色、网页颜色等......我认为这里也有类似的东西。

标签: c# wpf colors enumeration


【解决方案1】:

您可以使用WPF Toolkit Extended 工具包中的Color Picker 控件解决所有问题。

它允许您使用具有用户可以选择的颜色选项的组合框:

或者甚至使用调色板:

您可以通过在视图中引用命名空间来使用它:

xmlns:toolkit="http://schemas.xceed.com/wpf/xaml/toolkit"

并将其用作标准控件:

<toolkit:ColorPicker Name="ClrPcker_Background" SelectedColorChanged="ClrPcker_Background_SelectedColorChanged"/>

在你的代码后面:

private void ClrPcker_Background_SelectedColorChanged(object sender, RoutedPropertyChangedEventArgs<Color> e)
{
    TextBox.Text = "#" + ClrPcker_Background.SelectedColor.R.ToString() + ClrPcker_Background.SelectedColor.G.ToString() + ClrPcker_Background.SelectedColor.B.ToString();
}

它甚至允许您选择可供用户使用的颜色、如何对它们进行分类等等。

【讨论】:

  • 很好,这是一个很好的解决方案,也易于实施。但只是为了知识。是否只有一个 141 个元素列表?没有我在之前评论中所说的其他子集?
  • 据我所知,默认情况下,在 WPF 中不存在或区分 Web 颜色、桌面颜色等枚举的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
  • 2013-02-18
相关资源
最近更新 更多