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>