瀏覽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

源代碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM