Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C# WPF Как задать ресурс через кнопку? Всем категорический привет! Как задать ресурс для объекта image через нажатие кнопки, если в ресурсах объект есть а при задании ресурса Image1.Source = My.Resources таким методом объект не... https://www.cyberforum.ru/ wpf-silverlight/ thread198482.html Переход по вкладкам grid по нажатию кнопки C# WPF
Подскажите как связать вкладки созданные с батонами что бы при нажатии батона менялись вкладки на grid
C# WPF Отключение анимации нажатия кнопки https://www.cyberforum.ru/ wpf-silverlight/ thread198351.html
Здравствуйте! Есть элемент ToggleButton. При нажатии срабатывает анимация и затирает мой фон элемента управления, сделанный следующим кодом: <Grid> <Grid.Resources> <Style...
C# WPF Изменение формы кнопки Здравствуйте! Подскажите, как изменить форму ToggleButton на прямоугольную и закругленными углами? Есть такой код: <Grid> <Grid.Resources> <Style TargetType="{x:Type... https://www.cyberforum.ru/ wpf-silverlight/ thread198346.html
C# WPF Настройка цветов. Что-то вроде ColorPicker'a.
Здравстуйте. Хочу сделать подобную "вещь" как на картинке. Только не совсем понятно как заполнять квадратную область цветами определёнными. Может кто нибудь показать пример, что-ли. Или объяснить...
C# WPF ContextMenu - два элемента на одной строчке в меню Всем добрый день. Подскажите, как можно в XAML реализовать на одном из элементов ContextMenu 2 объекта Например, кнопку и левее её картинку. Притом нужно, чтобы и на картинке и кнопке был обработки... https://www.cyberforum.ru/ wpf-silverlight/ thread197920.html
C# WPF Richtextbox шрифт ввода https://www.cyberforum.ru/ wpf-silverlight/ thread197025.html
Как в richtextbox задать шрифт текущему вводу (именно в текущей позиции), а не не выбранному тексту или всему документу?
C# WPF Прекращена работа программы
Опять проблема и опять WPF, около месяца работал над одной программой, там есть база данных, и много "окон" в студии все нормально работает, когда сделал exe файл, и хотел запустить ,после нажатия на...
C# WPF WPF диалоговое окно "Выбор программы" (открыть с...)) https://www.cyberforum.ru/ wpf-silverlight/ thread196919.html
В контекстном меню любого файла есть пункт "Открыть с помощью..." после которого вызывается диалоговое окно "Выбор программы". Кто знает как вызвать это окно средствами WPF? :)
C# WPF DataGridComboBoxColumn биндинг https://www.cyberforum.ru/ wpf-silverlight/ thread196519.html
Доброго времени суток! Помогите пожалуйста, завис на одном моменте. Есть следующий код (Id_p это массив уникальных id_person, соответственно класс Person имеет свойство Adr для принятия туда объектов...
Передача параметров в WPF приложение. Как передать? C# WPF
Как запустить приложение, чтобы можно было обработать переданные ему параметры? То есть, чтобы приложение при запуске как-то получало параметры. Например в WinForms я делал так: static class...
C# WPF Снова нестандартные формы !!! https://www.cyberforum.ru/ wpf-silverlight/ thread196353.html
Доброго времени суток... Есть проблемка (чисто ради интереса), хочу создать окно произвольной формы и на нем какие то объекты... Нашол кучу статей в нете по этому поводу, все ЯКОБЫ рабочие но на...
Эксперт .NET
4341 / 2003 / 387
Регистрация: 27.03.2010
Сообщений: 5,457
Записей в блоге: 1
28.11.2010, 16:46 0

Использование своей темы оформления - C# WPF - Ответ 1149615

28.11.2010, 16:46. Показов 4894. Ответов 7
Метки (Все метки)

Ответ

Можно и в dll хранить темы.

Менеджер тем (у меня тут сделано не идеально, так что можно перенять только сам менеджер тем, а получение самих тем и т.д. можно и по своему сделать). Этот класс находится в Resources.dll:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
    public static class ThemeManagerMessage
    {
        static ThemeName Theme_StikerBlue = new ThemeName("Theme_StikerBlue", "Стикер - Голубой");
        static ThemeName Theme_StikerGreen = new ThemeName("Theme_StikerGreen","Стикер - Зелёный");
        static ThemeName Theme_StikerWhiteSmoke = new ThemeName("Theme_StikerWhiteSmoke","Стикер - Белый");
        static ThemeName Theme_StikerPink = new ThemeName("Theme_StikerPink","Стикер - Розовый");
 
        /// <summary>
        /// Получить список тем
        /// </summary>
        /// <returns></returns>
        public static String[] GetThemes()
        {
            String[] themes = new String[] 
            {
                Theme_StikerBlue.ShowName, Theme_StikerGreen.ShowName, Theme_StikerWhiteSmoke.ShowName,
                Theme_StikerPink.ShowName
            };
            return themes;
        }
        /// <summary>
        /// Получить ресурсный словарь по названию темы
        /// </summary>
        /// <param name="theme">Название темы, которую нужно получить</param>
        /// <returns></returns>
        public static ResourceDictionary GetThemeResourceDictionary(String theme)
        {
            Assembly assembly = Assembly.LoadFrom("Resources.dll");
            String packUri = String.Format(@"Resources;component/Themes/MessageThemes/{0}.xaml", theme);
            return Application.LoadComponent(new Uri(packUri, UriKind.Relative)) as ResourceDictionary;
        }
 
        public static void ApplyTheme(this Window wnd, string theme)
        {
            if (wnd != null)
            {
                ResourceDictionary dictionary = ThemeManagerMessage.GetThemeResourceDictionary(theme);
 
                if (dictionary != null)
                {
                    wnd.Resources.MergedDictionaries.Clear();
                    wnd.Resources.MergedDictionaries.Add(dictionary);
                }
            }
        }
 
        public static void ApplyTheme(this ContentControl control, string theme)
        {
            ResourceDictionary dictionary = ThemeManagerMessage.GetThemeResourceDictionary(theme);
 
            if (dictionary != null)
            {
                control.Resources.MergedDictionaries.Clear();
                control.Resources.MergedDictionaries.Add(dictionary);
            }
        }
 
        public static readonly DependencyProperty ThemeProperty = DependencyProperty.RegisterAttached("Theme",
            typeof(string), typeof(ThemeManagerMessage), new PropertyMetadata((String)String.Empty, 
            new PropertyChangedCallback(OnThemeChanged)));
 
        public static string GetTheme(DependencyObject d)
        {
            return (String)d.GetValue(ThemeProperty);
        }
 
        public static void SetTheme(DependencyObject d, String valueStr)
        {
            d.SetValue(ThemeProperty, valueStr);
        }
 
        private static void OnThemeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            string theme = e.NewValue as string;
            if (theme == string.Empty)
                return;
 
            ContentControl control = d as ContentControl;
 
            if (control != null)
            {
                control.ApplyTheme(theme);
            }
        }
 
        private struct ThemeName
        {
            /// <summary>
            /// Имя для смены по нему темы в dll
            /// </summary>
            public String RealName;
            /// <summary>
            /// Название для отображения в списке выбора тем
            /// </summary>
            public String ShowName;
 
            public ThemeName(String RealName, String ShowName)
            {
                this.RealName = RealName;
                this.ShowName = ShowName;
            }
 
        }
    }
}
Вот я в самом приложении меняю тему окну, для которого предварительно эту тему подготовил в Expression Blend.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void comboBoxMsgStyle_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            .................
            switch (styleMsgForThr)
            {
                case StyleMessage.StikerBlue: ThemeManagerMessage.ApplyTheme(this.windowStiker, "Theme_StikerBlue");
                    break;
                case StyleMessage.StikerGreen: ThemeManagerMessage.ApplyTheme(this.windowStiker, "Theme_StikerGreen");
                    break;
                case StyleMessage.StikerWhiteSmoke: ThemeManagerMessage.ApplyTheme(this.windowStiker, "Theme_StikerWhiteSmoke");
                    break;
                case StyleMessage.StikerPink: ThemeManagerMessage.ApplyTheme(this.windowStiker, "Theme_StikerPink");
                    break;
                case StyleMessage.StikerOrange: ThemeManagerMessage.ApplyTheme(this.windowStiker, "Theme_StikerOrange");
                    break;
            }
        }
Подключение .dll из XAML:
XML
1
        xmlns:themes="clr-namespace:Resources;assembly=Resources"


Вернуться к обсуждению:
Использование своей темы оформления C# WPF
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2010, 16:46
Готовые ответы и решения:

Темы оформления
Винда не видит дополнительные темы оформления:как из папки Resources, так и из других папок. Есть...

Темы оформления
Где в ОС ХР хранятся темы?

Ошибка темы оформления
У меня случилось такое горе: скачал тему оформления в формате exe и запустил, но установилась тема...

Не работают темы оформления
Здравствуйте, после проверки антивирусом касперского перестали работать aero темы оформления,...

7
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2010, 16:46

Темы оформления для ХР
Народ! :help:Помогите мне криворукому поставить темы. Скачал и установил патч UXTheme Multi-Patcher...

Темы оформления для формы
Можно ли сделать сменные скины на c# на всю форму? И если можно то как?

Установка темы оформления в Ubuntu 9.04
как установить тему офрмления на убунту?

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

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.