Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I use the correct Windows system colors?

Tags:

I want to use XAML to style a WPF button to look like the "Mixer" and "Change date and time settings..." text of these Windows 7 Notification area flyouts.

Does a property of SystemColors define that color? Which?

<Setter Property="Foreground"         Value="{DynamicResource {x:Static SystemColors.????}}" /> 

Windows 7 Notification area flyout

like image 886
Zack Peterson Avatar asked Feb 23 '11 17:02

Zack Peterson


2 Answers

The best method I've found is experimentation and guessing.

I created a little utility to visualize these colors.

Interface

System.Windows.SystemColors

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>                          &#160;&#160;&#160;&#160;&#160;                         &#160;&#160;&#160;&#160;&#160;                         &#160;&#160;&#160;&#160;&#160;                     </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> 

C#

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; }     } } 
like image 102
Zack Peterson Avatar answered Oct 23 '22 19:10

Zack Peterson


Check out this SystemColors reference, and specifically the Aero Theme colors.

It's not obvious which color name that text would use, but trying to eyeball it, it looks like HighlightBrush or MenuHighlightBrush could be candidates...

like image 44
Dan J Avatar answered Oct 23 '22 18:10

Dan J