Как использовать правильные системные цвета Windows? - PullRequest
18 голосов
/ 23 февраля 2011

Я хочу использовать XAML, чтобы стиль кнопки WPF выглядел как текст «Микшер» и «Изменить настройки даты и времени ...» этих всплывающих окон в области уведомлений Windows 7.

Свойство SystemColors определяет этот цвет? Что?

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

Windows 7 Notification area flyout

Ответы [ 4 ]

29 голосов
/ 24 февраля 2011

Лучший метод, который я нашел, это эксперименты и догадки.

Я создал небольшую утилиту для визуализации этих цветов.

Интерфейс

System.Windows.SystemColors

1010 * 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; }
    }
}
6 голосов
/ 23 февраля 2011

Ознакомьтесь с ссылкой на SystemColors , а именно с Aero Theme colors .

Неясно, какое название цвета будет использовать текст, но пытаясь поразить егопохоже, что HighlightBrush или MenuHighlightBrush могут быть кандидатами ...

2 голосов
/ 21 марта 2012

Очень сложно сравнивать цвета на глаз!

Если вы делаете снимок экрана (кнопка Prt Scr на клавиатуре), вы можете вставить его в mspaint и использовать пипетку для получения фактических значений цвета.

Хитрый на псевдониме текста, но я прочитал цвет текста на скриншоте, чтобы быть R, G, B = 0,102,204 и HotTrackColor, чтобы быть R, G, B = 0,102,203

Как я уже сказал, разница может быть связана с наложением текста.

Примечание: После нажатия с помощью инструмента «Пипетка» вам может понадобиться нажать «Редактировать цвета», чтобы увидеть фактические значения цвета. Вы все равно делаете в win7.

2 голосов
/ 23 февраля 2011

Возможно, вы захотите прочитать Aero Theme рекомендации по эстетике .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...