• 浏览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

    源代码下载

  • 相关阅读:
    Activity
    日志
    StringBuffer
    内部类
    接口
    多态
    final关键字
    abstract关键字
    对象初始化
    继承
  • 原文地址:https://www.cnblogs.com/ProJKY/p/2303879.html
Copyright © 2020-2023  润新知