Смена стиля в realtime

WPF
  1. 6 года назад

    Здравствуйте. Очень понравились темы DarckBlue и DarckOrange, настолько понравились что не могу выбрать. И Решил что нужно сделать смену "шкурок". Как реализовать смену стилей по нажатии на кнопку меню? Гугл чет не хочет делиться инфой.

  2. Alexandr_Erohin

    Nov 25 Администратор
    Добавлено 6 года назад Alexandr_Erohin

    Смену темы можно осуществить путем смены необходимого словаря ресурсов. Допустим имеем форму с кнопкой, и один подключенный словарь ресурсов:

    <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="Blue.xaml"></ResourceDictionary>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>

    Вот обработчик для кнопки, который динамически меняет тему:

    private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                ResourceDictionary dictionary = new ResourceDictionary();
                dictionary.Source = new Uri("Orange.xaml", UriKind.Relative);
    
                // Динамически меняем коллекцию MergedDictionaries
                Application.Current.Resources.MergedDictionaries[0] = dictionary;
            }

    Темы соответственно прийдется скомпоновать в отдельные файлы, например Orange.xaml и Blue.xaml.

  3. На самом деле с утра уже нашел подобное, хотел как раз пробовать)))) Но благодарю, сделаю отпишусь как оно)))

  4. Добавлено 6 года назад RusNekromant

    Оу все получилось))) Только получается в Application нужно прописать только одну тему иначе не смениться. То есть та которая будет по умолчанию а остальные положить в папку темы и от туда их тянуть уже кодом по надобности и подменять.

    А я их сразу в Application все прописал и был немного удивлен что ничего не заработало. :)

    Ах да вот код для VB

            Dim Dictionary As ResourceDictionary = New ResourceDictionary()
            Dictionary.Source = New Uri("/Темы/СтруктураDarkBlue.xaml", UriKind.Relative)
    
            ' Динамически меняем коллекцию MergedDictionaries
    
            Application.Current.Resources.MergedDictionaries(0) = Dictionary

или зарегистрируйтесь чтобы ответить