反射获取颜色

2 篇文章 0 订阅

str转任意类型?

(T)System.ComponentModel.TypeDescriptor.GetConverter(
   
typeof(T)).ConvertFromInvariantString("");

.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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值