随笔 - 46  文章 - 0  评论 - 136  阅读 - 11万

浏览WPF中内置颜色名对应的颜色

学习WPF一段时间了,对于里面内置的颜色仅记得几种,相对于里面丰富的颜色来说,极大的限制了使用WPF过程中的选择.

通常,使用Xaml语言,会根据属性类型自动调用相应的转换器,转换为需要的类型值. 如果要查看所有的颜色, 需要枚举和转换, 并显示出来。

先看一个《WPF Unleashed》中介绍的例子:

System.Windows.Controls.Button b = new System.Windows.Controls.Button();

b.Content = "OK";

b.Background = (Brush)System.ComponentModel.TypeDescriptor.GetConverter(
typeof(Brush)).ConvertFromInvariantString("White");

那么,如果我们只要知道了所有的颜色名,就可以得到对应的颜色了。而.NET中的System.Windows.Media.Colors类包含了所有的颜色名,可以使用反射得到所有的颜色名。

代码参见:

// 取得保存颜色命名的类类型
Type colorType = typeof(Colors);

// 利用反射,得到所有颜色
var colorNames = from MemberInfo color in colorType.GetMembers()
where color.MemberType == MemberTypes.Property
select color.Name;

下一步,就是迭代颜色名,转换为Color类实例,并显示出颜色来了。

代码参见:

复制代码
// 通过类型转换和颜色名,得到对应颜色实例
var colorColl = from name in colorNames
let color = (Color)TypeDescriptor.
GetConverter(typeof(Color)).
ConvertFromInvariantString(name)
select new { Name = name, Color = color };

// 通过设置TextBlock,显示所有颜色
var textblocks = from color in colorColl
select new TextBlock()
{
Text = color.Name,
Background = new SolidColorBrush(color.Color)
};

// 增加一个边框,突出背景色
var borders = from textblock in textblocks
select new Border
{
BorderThickness = new Thickness(5),
Child = textblock
};

// 显示所有颜色名,和对应颜色
foreach (var border in borders)
{
drawPanel.Children.Add(border);
}
复制代码

所对应的XAML代码:

<Window x:Class="ColorShowcase.MainWindow"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
Title
="显示不同的内置颜色" Width="690" Height="500" Loaded="Window_Loaded">
<ScrollViewer>
<WrapPanel Name="drawPanel"/>
</ScrollViewer>
</Window>

程序运行截图:

程序编译环境 VS2010 + .NET 4 + WPF

源代码下载

posted on   ProJKY  阅读(9950)  评论(2编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
< 2011年12月 >
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

点击右上角即可分享
微信分享提示