Я читал об этом какое-то время, но я не могу найти ответ, который может мне помочь, поэтому я надеюсь, что мне повезет больше.StaticResource Поиск не работает с объединенными словарями
В моем проекте у меня есть библиотека, которая содержит множество стилей для элементов управления. Эти стили используют ресурсы как статические ресурсы. Таким образом, "дерево ресурсов" в основном выглядит следующим образом:
- Theme.xaml
- SizeResources.xaml
- ColorResources.xaml
- ControlStyles.xaml
- Control1.xaml
- Control2 .xaml
Тема.xaml объединяет SizeResources, ColorResources и ControlStyles. ControlStyles объединяют все xamls для определенных элементов управления.
Теперь в моем приложении я хотел бы применить эту тему, поэтому OnStartup добавляю Theme.xaml в свой Application.Current.Resources.MergedDictionaries. Что отлично работает, все ключи есть. Когда я пытаюсь использовать элементы управления, я получаю исключение, которое, например, не может найти размер или цветной ресурс. Конкретный пример:
У меня есть специальная кнопка, которая имеет цвет фона, определенный в ColorResources, мой ButtonStyle использует этот ресурс как статический ресурс. Когда я использую эту кнопку в своем проекте приложения, я получаю исключение, что фоновый ресурс не найден. Когда я меняю статический ресурс на динамический ресурс в control1.xaml, тогда он работает.
Любые идеи, почему я не могу сделать это со статическим ресурсом? По моему мнению, статичность также должна работать.
Эй, вы действительно предоставили очень хороший пример. Мой Xaml выглядит примерно так же, как и приведенный вами пример.Поэтому в основном мой вопрос: зачем мне объединять ColorResources в файл, который содержит мой стиль Button, когда я объединяю ColorResources, а также ресурс Button на уровне приложения в один объединенный словарь. Application.Resources.MergedDictionaries.add (Theme.xaml) Чтобы использовать мой пример выше. Theme.xaml предоставляет цветные ресурсы, почему я должен объединить их в кнопку xaml? – m00ni
Потому что это не статически доступный, по крайней мере, не с точки зрения компилятора XAML, который компилирует ресурсы кнопки отдельно от чего-либо еще. Он должен разрешать любые статические ресурсы, на которые ссылается кнопка, просто просматривая словарь ресурсов Button, а не на уровне вашего приложения. –
Итак, компилятор в основном начинается с листьев дерева словаря ресурсов и начинает компиляцию вверх. Поэтому, если я включу свой Colors.xaml внутри кнопки, Colors.xaml будет скомпилирован без проблем, а затем в строке будет сам словарь Button, который ссылается на цвета. Он может быть скомпилирован без проблем, потому что все цвета были скомпилированы и доступны для него. Если я не совмещаю цвета внутри Button, словарь Button компилируется без ресурсов, так как все ресурсы, которые объединены в дерево дальше, недоступны во время компиляции? – m00ni