Ответ 1
Лучший метод, который я нашел, - эксперимент и угадывание.
Я создал небольшую утилиту для визуализации этих цветов.
Интерфейс
XAML
<Window x:Class="SystemColors1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="System.Windows.SystemColors" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="CellColor">
<DockPanel>
<TextBlock>
<TextBlock.Background>
<SolidColorBrush Color="{Binding Path=Color}" />
</TextBlock.Background>
<TextBlock.Text>
     
     
     
</TextBlock.Text>
</TextBlock>
</DockPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView Grid.Row="1"
Name="SystemColorsList"
ItemsSource="{Binding}">
<ListView.View>
<GridView AllowsColumnReorder="True">
<GridViewColumn CellTemplate="{StaticResource CellColor}"
Header="Color"
Width="Auto"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}"
Header="Name"
Width="Auto"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
С#
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
using System.Reflection;
namespace SystemColors1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<ColorAndName> l = new List<ColorAndName>();
foreach (PropertyInfo i in typeof(System.Windows.SystemColors).GetProperties())
{
if (i.PropertyType == typeof(Color))
{
ColorAndName cn = new ColorAndName();
cn.Color = (Color)i.GetValue(new Color(), BindingFlags.GetProperty, null, null, null);
cn.Name = i.Name;
l.Add(cn);
}
}
SystemColorsList.DataContext = l;
}
}
class ColorAndName
{
public Color Color { get; set; }
public string Name { get; set; }
}
}