Я уже целый день безуспешно пытаюсь создать кучу кистей в теме, а затем использовать их с DynamicResource в пользовательском элементе управления. Я сделал следующее:
Так что моя проблема в том, что я не могу найти способ определить значения по умолчанию в теме, чтобы я мог программно изменить их в приложении. Как StaticResource может найти кисть, а DynamicResource нет?!
Я должен добавить, что Мы создали статический класс, содержащий ключи ресурсов компонента в качестве свойств, которые я затем использую в xaml как {x: Static UI: ResourceScheme.ControlBackgroundKey}, например. Моя проблема похожа на эту: ComponentResourceKey как проблема DynamicResource только в том, что если я заменяю статические ключи свойств на разметку XAML для ключа ресурса компонента, он все равно не работает.
Может кто-то помочь, пожалуйста меня здесь? : ([
Наконец-то исправил. Похоже, что наличие типа для ключа ресурса компонента в другой сборке вызвало всю проблему. Подведем итог:
Конечный результат для этого:
Решением этой проблемы может быть перемещение класса ресурсов в библиотеку элементов управления.
Поскольку я до сих пор не знаю, почему это происходит, этот вопрос остается открытым, даже если он немного изменен: почему он не работает в первом сценарии?
Вот разница,
StaticResource загружается во время загрузки, это означает, что ключ ресурса, который вы используете, должен быть лексически определен до использования.
Таким образом, статический ресурс в случае пользовательского элемента управления должен быть определен только над определением элемента управления в том же файле generic.xaml. Поэтому, если вы поместите свои кисти в другой xaml, это точно не сработает в случае статического ресурса.
По этой причине, если другие ресурсы типа xaml не включены в виде какого-либо импорта во время компиляции в том же файле, вы не можете использовать статический ресурс в файле. Это просто означает, что фактический xaml файла/компонента/элемента управления каким-то образом должен содержать фактическую ссылку на статический ресурс, который вы используете.
Теперь у меня есть сомнения, почему DynamicResource не будет работать, потому что, вероятно, DynamicResource будет искать только в ResourceDictionary Приложения (где используется элемент управления), но не в generic.xaml.
Я не уверен на 100%, но мне кажется, что если вы определяете настраиваемый элемент управления и используете DynamicResource, то ваши ресурсы должны находиться в словаре ресурсов приложения или в родительском контейнере словаря ресурсов вашего элемента управления, но это не может быть в универсальный.xaml.
Поскольку DynamicResource будет искать ключи только в логическом дереве среды выполнения элемента управления, и поэтому он может не найти ресурсы, которые находятся в generic.xaml, если только generic.xaml явно не добавлен в Application.Resources.
Резюме: StaticResource должен быть лексически доступен в том же файле во время компиляции, ресурсы будут доступны в словаре Application.Resources, его можно найти в логическом дереве, но во время компиляции только в той же dll или в том же generic.xaml.
DynamicResource необходимо искать в Application.Resources и в логическом дереве элемента управления во время выполнения.
Дополнительные сведения см. в Обзоре ресурсов