|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Не могу понять как переопределять ключи в ресурсах. Простой пример с двумя кнопками Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Судя по https://docs.microsoft.com/ru-ru/dotnet/framework/wpf/advanced/xaml-resources, ключ ищется сначала в ресурсах элемента и потом поиск подымается по логическому дереву. В таком случае у обоих кнопок должен быть цвет LightGreen, но выходит не так. У первой кнопки цвет берётся из ресурсов панели - LightBlue У второй кнопки с цветом через стиль из ресурсов окна - LightCoral Что здесь не так? Я что-то не так делая или описание поиска ключа не верное? Да, можно поставить DynamicResource и тогда будет работать как задумано. Так делать правильно? И в указанной странице пишется всё же за StaticResource. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 14:12 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
обычно все кисти и другие подобные ресурсы и так нужно через DynamicResource задавать. Разница между Static и Dynamic ресурсов в том, что если Static получат\ищет значение только один раз, то Dynamic каждый раз как будет переопределен ресурс. На уровне окна в стиле был получен StaticResource, значит, что ресурс будет найден всего 1 раз и сколько бы вы там его не переопределяли, он будет всегда таким каким был найден 1 раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 14:22 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Roman Mejtesобычно все кисти и другие подобные ресурсы и так нужно через DynamicResource задавать. Разница между Static и Dynamic ресурсов в том, что если Static получат\ищет значение только один раз, то Dynamic каждый раз как будет переопределен ресурс. На уровне окна в стиле был получен StaticResource, значит, что ресурс будет найден всего 1 раз и сколько бы вы там его не переопределяли, он будет всегда таким каким был найден 1 раз. Спасибо! Получается https://docs.microsoft.com/ru-ru/dotnet/framework/wpf/advanced/xaml-resources неверная информация. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 14:41 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Eld HaspПолучается https://docs.microsoft.com/ru-ru/dotnet/framework/wpf/advanced/xaml-resources неверная информация.и в чем же? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 14:57 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Shocker.ProEld HaspПолучается https://docs.microsoft.com/ru-ru/dotnet/framework/wpf/advanced/xaml-resources неверная информация.и в чем же?Цитата из этого источника "В предыдущем примере когда XAML загрузчика обрабатывает значение { StaticResource MyBrush} для Background свойство Button, логика подстановки ресурсов сначала проверяет словарь ресурсов для Button элемент. Если Button нет определения ключа ресурса MyBrush...." Речь идёт, именно, о StaticResource, а он так не работает - пример из начала темы ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 15:03 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
StaticResource и DynamicResouce ищут ресурс одинаково, как вы и описали, сперва у себя, потом у родителей, потом у приложении и т.д. Поиск осуществляется с помощью метода FrameworkElement.FindResource. Но StaticResource делает это только 1 раз в момент инициализации, а DynamicResource каждый раз когда ресурс переопределен. Если вы в стиле указали StaticResource, то как только стиль будет загружен в память, все его статические ресурсы загрузятся 1 раз и больше обновляться не будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 15:10 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Roman MejtesStaticResource и DynamicResouce ищут ресурс одинаково, как вы и описали, сперва у себя, потом у родителей, потом у приложении и т.д. Поиск осуществляется с помощью метода FrameworkElement.FindResource. Но StaticResource делает это только 1 раз в момент инициализации, а DynamicResource каждый раз когда ресурс переопределен. Если вы в стиле указали StaticResource, то как только стиль будет загружен в память, все его статические ресурсы загрузятся 1 раз и больше обновляться не будут.А для первой кнопки, которая без стиля? Почему цвет не грузится из собственных ресурсов? Теоретически, наверное, потому, что цвет устанавливается до инициализации ресурсов кнопки. И так как ресурсов кнопки ещё нет, то он берётся из вышестоящих ресурсов. Но тогда указанный совет из docs.microsoft всё равно - неверен. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 15:50 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Код: xml 1. 2. 3. 4. 5.
<SolidColorBrush x:Key="Button.Background" Color="LightGreen"/> будет действовать только для содержимого кнопки, на саму кнопку действовать не будет. нельзя определить ресурс в элементе управления и использовать его в нём же. Но такой вариант, который вы указали сработает, если вы переопределяете ресурсы шаблона элемента управления. (ControlTemplate'а) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 16:14 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Roman Mejtes Код: xml 1. 2. 3. 4. 5.
<SolidColorBrush x:Key="Button.Background" Color="LightGreen"/> будет действовать только для содержимого кнопки, на саму кнопку действовать не будет. нельзя определить ресурс в элементе управления и использовать его в нём же. Но такой вариант, который вы указали сработает, если вы переопределяете ресурсы шаблона элемента управления. (ControlTemplate'а) Если делать делать ссылку на динамический ресурс, то он подхватывается и из ресурсов кнопки. Если статический , то только из вышестоящих ресурсов. Я в этом разобрался - Спасибо. Но речь немного о другом - в docs.microsoft написано, что статический ресурс тоже должен подхватывается из ресурсов кнопки. И интерес в том, что это - случайная описка? Или что-то ещё - до чего я не додумался? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 17:45 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Eld Hasp, в MSDN полно ошибок, особенно если брать переводы и не только машинные. Не так давно, кидал ссылку на такой пример. В eb-US версии написано одно, а в ru-RU наоборот :) Вообще в статье, которую вы привели, написано: авторВы можете определить ресурсы в любом элементе. Тем не менее, ресурсы, наиболее часто определяются в корневом элементе, который является Page в примере. А еще лучше определять ресурсы в отдельном ресурсном файле, разбив их таким образом "по смыслу" и потом подключать их с помощью MergeDictionary. Такие ресурсы как кисти, строки и прочее подключаются на уровне приложения. Так их будет проще найти, когда потребуется их изменить. А если надо будет переопределить на системном уровне, то это не составит большого труда. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 18:29 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 18:35 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Roman MejtesEld Hasp, в MSDN полно ошибок, особенно если брать переводы и не только машинные. Не так давно, кидал ссылку на такой пример. В eb-US версии написано одно, а в ru-RU наоборот :) Вообще в статье, которую вы привели, написано: авторВы можете определить ресурсы в любом элементе. Тем не менее, ресурсы, наиболее часто определяются в корневом элементе, который является Page в примере. А еще лучше определять ресурсы в отдельном ресурсном файле, разбив их таким образом "по смыслу" и потом подключать их с помощью MergeDictionary. Такие ресурсы как кисти, строки и прочее подключаются на уровне приложения. Так их будет проще найти, когда потребуется их изменить. А если надо будет переопределить на системном уровне, то это не составит большого труда. Всё понятно. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 19:10 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Roman MejtesEld Hasp, в MSDN полно ошибок, особенно если брать переводы и не только машинные. Не так давно, кидал ссылку на такой пример. В eb-US версии написано одно, а в ru-RU наоборот :) Вообще в статье, которую вы привели, написано: авторВы можете определить ресурсы в любом элементе. Тем не менее, ресурсы, наиболее часто определяются в корневом элементе, который является Page в примере. English : "In the preceding example, when the XAML loader processes the value {StaticResource MyBrush} for the Background property on Button, the resource lookup logic first checks the resource dictionary for the Button element. If Button does not have a definition of the resource key MyBrush ...." - ошибка в оригинале, а не в переводе. Перевод правильный. Но, насколько верно считать docs.microsoft - официальной документацией? И даже официальная не застрахована от ошибок. Все люди - все ошибаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 19:15 |
|
Переопределение ключей в ресурсах
|
|||
---|---|---|---|
#18+
Все варианты подключения ресурсов 1) Статик в привязке свойства 2) Статик в привязке в стиле 3) Динамик в привязке свойства 4) Динамик в привязке в стиле Код: xml 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 19:21 |
|
|
start [/forum/topic.php?fid=21&msg=39733756&tid=1440377]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 170ms |
0 / 0 |