Arhn - архитектура программирования

Получить цвет окна Aero

Я сделал довольно приятный интерфейс в стиле Windows 8, используя WPF. Это уже оказалось намного лучше, чем я мог бы пожелать, но мне было интересно следующее:

Можно ли каким-то образом получить текущий цвет окна, установленный пользователем? Вы знаете, вы можете установить цвет Aero, щелкнув правой кнопкой мыши по рабочему столу ... Я планирую использовать этот цвет для пары элементов холста в моем графическом интерфейсе.

Заранее спасибо!

26.10.2012

  • Возможный дубликат stackoverflow.com/questions/628483/ 26.10.2012
  • Правильный способ - закрепить DwmGetColorizationColor () 26.10.2012

Ответы:


1

Для этого вы можете запросить раздел реестра ColorizationColor.

Я даже пошел дальше и создал метод для получения шестнадцатеричного значения цвета, надеюсь, это вам поможет:

public void SomeMethod()
{
    int argbColor = (int)Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM","ColorizationColor", null);
    var color = System.Drawing.Color.FromArgb(argbColor);
    string hexadecimalColor = ConverterToHex(color);
}


private static String ConverterToHex(System.Drawing.Color c)
{
    return String.Format("#{0}{1}{2}", c.R.ToString("X2"), c.G.ToString("X2"), c.B.ToString("X2"));
}
26.10.2012
  • Вместо этого я использую ваш код, так как мне нужен цвет в коде позади. Я подумал, что мне лучше собрать все вместе, чтобы сохранить читабельность. 29.10.2012
  • Мой ответ также изменит цвет, когда фактически изменится цвет Aero (что часто случается в Windows 8 с включенной автоматической окраской). 16.08.2014
  • Как узнать, изменилось ли это значение при привязке к SystemColors.WindowColorKey 24.02.2017

  • 2

    Класс SystemColours существует именно для этой цели. Вы можете привязать его напрямую, вот так

    "{DynamicResource {x:Static SystemColors.WindowColorKey}}"
    
    26.10.2012
  • Все очень просто! Большое спасибо! 29.10.2012

  • 3

    Мне удалось получить правильный цвет, используя следующий код: Небольшое примечание: в нем есть небольшая поправка, позволяющая игнорировать альфа-бит шестнадцатеричного числа, поэтому я получаю полный цвет, а не менее насыщенный.

    string colorizationValue = string.Format("{0:x}", Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM", "ColorizationColor", "00000000"));
    StringBuilder bl = new StringBuilder(colorizationValue);
    bl[0] = 'd';
    bl[1] = '9';
    colorizationValue = bl.ToString();
    
    BrushConverter bc = new BrushConverter();
    Brush brush = (Brush)bc.ConvertFrom("#" + colorizationValue);
    cvs_barColor.Background = brush;
    
    29.10.2012

    4

    Я создал для этого здесь библиотеку с открытым исходным кодом, которая также доступна в NuGet.

    install-package aerocolor-wpf.AeroColor

    После установки пакета вы можете обратиться к DynamicResource именам AeroColor и AeroBrush в зависимости от того, что вам нужно.

    Также необходим установочный код, но его не так уж и много. Просто поместите что-нибудь в свой Loaded обработчик событий окна, как показано ниже.

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            Loaded += MainWindow_Loaded;
        }
    
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            AeroResourceInitializer.Initialize();
        }
    }
    

    Отличительной особенностью этой библиотеки является то, что она также устанавливает ловушку, которая обновляет эти ресурсы по мере изменения фактического цвета Aero в системе. Это означает, что вам тоже не нужно обрабатывать это, и если вы используете DynamicResource для указания цвета в вашем XAML вместо StaticResource, WPF также автоматически обновит цвет в вашем пользовательском интерфейсе.

    Выглядит очень круто, когда Windows 8 меняет цвет Aero переходно, а ваш цвет следует за ним.

    15.08.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..


    © 2024 arhn.ru, Arhn - архитектура программирования