|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Пытаюсь для разных тем винды задать разные стили для кнопки. Как я понимаю, WPF умеет автоматически использовать темы (Aero.NormalColor.xaml, Classic.xaml и прочие), в зависимости от текущей тема винды. XAML окна Код: xml 1. 2. 3. 4. 5. 6.
Aero.NormalColor.xaml Код: xml 1. 2. 3.
Classic.xaml Код: xml 1. 2. 3.
В свойствах сборки указал. Код: c# 1. 2.
Ожидаю, что при выборе классической темы кнопка будет цвета Violet , а при выборе темы аэро - Red . Однако, кнопка все время дефолтного серого цвета. Как сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 09:19 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
monstrillaПытаюсь для разных тем винды задать разные стили для кнопки.Зачем? За это платят отдельно? monstrillaКак я понимаю, WPF умеет автоматически использовать темы (Aero.NormalColor.xaml, Classic.xaml и прочие), в зависимости от текущей тема винды. Да авторEvery Control in WPF has a default Style that provides, among other things, the Control's default ControlTemplate. WPF looks for the default style in a special resource dictionary in the Themes folder in the same assembly as the control. The key for the default style is provided by the Control.DefaultStyleKey dependency property, the default value of which is overriden in each sub-class of Control. The name of the resource dictionary depends on the current Windows theme e.g. on Vista using the Aero theme, the dictionary is called Aero.NormalColor.xaml, on XP using the default theme it is Luna.NormalColor.xaml. If the style is not found in the theme dictionary, it looks in Generic.xaml i.e for controls whose look doesn't depend on the theme. This only applies to any custom controls you have defined i.e. classes derived from Control, directly or indirectly. You can change the default style for a standard control by deriving from it and calling DefaultStyleKeyProperty.OverrideMetadata in the static constructor, but you then have to supply the full style including ControlTemplate. Note that you can tell WPF to look in an external assembly for your default style by using the ThemeInfo attribute. The external assembly must be named <YourAssembly>.<ThemeName>.dll e.g. PresententationFramework.Aero.dll. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 09:39 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Алексей К, авторЗа это платят отдельно? платят, платят. без создания класса-наследника кнопки не обойтись что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 09:43 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
monstrillaАлексей К, авторЗа это платят отдельно? платят, платят. без создания класса-наследника кнопки не обойтись что ли?Если переопределение стиля на уровне ресурсов Application не устраивает, тогда не обойтись. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 09:47 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
зы: Ресурсы приложения можно менять программно при запуске, в зависимости от окружения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 09:48 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Алексей К, я в курсе как подменить ресурс динамически. правда пока не знаю, как определить текущую тему винды, но это детали. это не тру-подход, в том смысле, что при смене темы винды в процессе работы приложения, стили приложения не сменятся до его перезапуска. и мне все-таки хочется использовать нативную способность ВПФ использовать разные словари для разных тем винды, а не менять словарь ручками. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 09:53 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
monstrillaи мне все-таки хочется использовать нативную способность ВПФ использовать разные словари для разных тем винды, а не менять словарь ручками.Тогда придётся наследовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 10:20 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Алексей К, Чот не получается :Е Кнопка-наследник: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Главное окно: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Aero.NormalColor.xaml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
generic.xaml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
А кнопка все время серая, игнорит стили что в теме аэро, что в классической (тут за неимением файла Classic.xaml WPF по идее должен тянуть стиль из generic.xaml ). Что делаю не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 18:08 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
а не проще было сделать так: public class MyButton : Button {} ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 18:27 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 06:56 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Roman Mejtes, ну так я вроде так и отнаследовался. или имеешь ввиду без кзамл-файла? пробовал, тоже не вышло Алексей К еххх, совсем забыл про это. заработало :) тогда вопрос номер два. я хочу, чтобы стили применялись не ко всем кнопкам ImageButton , т.е. по сути хочу стандартно задать ключ для стиля и прикреплять стиль к кнопке по ключу. но ведь в MainWindow нет ссылки на ресурс (он теперь динамически мержится ВПФ-ом). Т.е. такого нет Код: xml 1. 2. 3.
Как быть? Я, конечно могу использовать в проекте обычные кнопки + кнопки ImageButton , для обычных стиль не будет меняться при смене темы винды, для ImageButton будет. Но хочется понять возможно ли в принципе использовать ключ ресурса? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 11:04 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
monstrillaя хочу, чтобы стили применялись не ко всем кнопкам ImageButton , т.е. по сути хочу стандартно задать ключ для стиля и прикреплять стиль к кнопке по ключу. но ведь в MainWindow нет ссылки на ресурс (он теперь динамически мержится ВПФ-ом).Указать стиль явно через свойство Style? Или я не понял вопроса... зы: Обратить внимание на свойство FrameworkElement.OverridesDefaultStyle Property . ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 11:25 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Алексей К, Код: xml 1. 2.
да, чтоб можно было сделать так. ToolBarButtonBaseStyle - ключ стиля, который определен в Aero.NormalColor.xaml к примеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 11:32 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
При OverridesDefaultStyle=False (по дефолту так) явно указанные стили автоматически наследуются от стилей текущей системной темы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 12:29 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Алексей К, ты не понял, распишу. забудем сейчас про то, что меняются темы винды. возьмем классическую работу со стилями. т.е. есть словарь ресурсов, в нем определен стиль для кнопки + в стиле указан ключ. Cannot find resource named 'MyStyle'. Resource names are case sensitive. <Style TargetType="{x:Type Local:ImageButton}" x:Key="MyStyle"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Local:ImageButton}"> // бла-бла, не суть что </ControlTemplate> </Setter.Value> </Setter> </Style> Теперь я могу использовать этот стиль везде, где подключен словарь ресурсов, да хоть в MainWindow. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
То есть могу добавлять в грид как кнопки использующие стиль, так и кнопки со стилем по умолчанию. А теперь возвращаемся к задаче со сменой тем винды. Я хочу иметь возможность добавлять кнопки, стиль которых будет меняться в зависимости от темы винды и будет браться из словарей (Aero.NormalColor, Classic и прочие) это мы уже умеем делать. А так же иметь возможность добавлять кнопки, которые будут игнорировать стили из этих словарей (Aero.NormalColor, Classic и прочие), а будут юзать дефолтные стили для этих тем. Т.е. кнопки, которые используют стиль по ключу - получают свои стили из словарей (Aero.NormalColor, Classic и проч), а те, которые не используют стиль, получают дефолтные стили для этих тем. Вроде понятно написал. Это реально сделать? или Код: c# 1. 2. 3. 4.
рубит на корню мои мечты? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 13:59 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Алексей К, отформатировал пост. ты не понял, распишу. забудем сейчас про то, что меняются темы винды. возьмем классическую работу со стилями. т.е. есть словарь ресурсов, в нем определен стиль для кнопки + в стиле указан ключ. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9.
Теперь я могу использовать этот стиль везде, где подключен словарь ресурсов, да хоть в MainWindow. Код: xml 1. 2. 3.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
То есть могу добавлять в грид как кнопки использующие стиль, так и кнопки со стилем по умолчанию. А теперь возвращаемся к задаче со сменой тем винды. Я хочу иметь возможность добавлять кнопки, стиль которых будет меняться в зависимости от темы винды и будет браться из словарей (Aero.NormalColor, Classic и прочие) это мы уже умеем делать. А так же иметь возможность добавлять кнопки, которые будут игнорировать стили из этих словарей (Aero.NormalColor, Classic и прочие), а будут юзать дефолтные стили для этих тем. Т.е. кнопки, которые используют стиль по ключу - получают свои стили из словарей (Aero.NormalColor, Classic и проч), а те, которые не используют стиль, получают дефолтные стили для этих тем. Вроде понятно написал. Это реально сделать? или Код: c# 1. 2. 3. 4.
рубит на корню мои мечты? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 14:02 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Я запутался. :-) Может позже ещё раз прочитаю, пойму... Пока могу добавить, что есть возможность наследования стилей. Может это чем-то поможет: Код: xml 1. 2.
В результате стиль темы для ImageButton наследуется от стиля темы для Button. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 16:50 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
А вообще, раз такие сложности, может подумать о применении композиции вместо наследования? В случае с ImageButton, если это то, о чём я подумал - я делал такой контрол и вставлял его в стандартную кнопку. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 16:53 |
|
Как задать разные стили для элемента UI для разных тем Windows
|
|||
---|---|---|---|
#18+
Алексей К, сложностей нет. я просто пытался понять концепцию. ну я уже сам вроде разобрался :) те стили, что указываются в словарях (Аэро, Классик) становятся дефолтными для соответствующих тем. при желании можно эти стили перекрывать другими стилями. Т.е. определяем словарь со стилями, стили с ключами. Мержим словарь и используем стили по ключу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2014, 10:35 |
|
|
start [/forum/topic.php?fid=21&fpage=20&tid=1441023]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 433ms |
0 / 0 |