StaticResource Lookup не работает с объединенными словарями - PullRequest
2 голосов
/ 20 февраля 2012

Я уже давно читаю об этом, но не могу найти ответ, который может мне помочь, поэтому я надеюсь, что мне здесь повезет больше.

В моемУ меня есть библиотека, которая содержит много стилей для элементов управления.Эти стили используют ресурсы в качестве статического ресурса.Таким образом, «дерево ресурсов» в основном выглядит так:

  • Theme.xaml
    • SizeResources.xaml
    • ColorResources.xaml
    • ControlStyles.xaml
      • Control1.xaml
      • Control2.xaml

Theme.xaml объединяет SizeResources, ColorResources и ControlStyles.ControlStyles объединяют все xamls для определенных элементов управления.

Теперь в моем приложении я хотел бы применить эту тему, поэтому при запуске я добавляю Theme.xaml в мой Application.Current.Resources.MergedDictionaries.Что отлично работает, все ключи есть.Когда я сейчас пытаюсь использовать элементы управления, я получаю исключение, которое, например, не позволяет найти ресурс размера или цвета.Конкретный пример:

У меня есть специальная кнопка с цветом фона, который определен в ColorResources, мой ButtonStyle использует этот ресурс в качестве статического ресурса.Когда я использую эту кнопку в своем проекте приложения, я получаю исключение, что ресурс Background не может быть найден.Когда я изменяю статический ресурс на динамический ресурс в control1.xaml, тогда он работает.

Есть идеи, почему я не могу сделать это со статическим ресурсом?Насколько я понимаю, статика должна работать так же хорошо.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Если вы попытаетесь определить:

<Rectangle Fill="{StaticResource SpecialBackgroundBrush}"/>

вместо вашего Button, это сработает?Я подозреваю, что это будет.Предполагая, что это так, вам нужно убедиться, что сам стиль Button имеет статический доступ к кистям.Таким образом, в вашем Button.xaml вам нужно что-то вроде:

<ResourceDictionary ...>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ColorResources"/>
    </ResourceDictionary.MergedDictionaries>

    <Style TargetType="Button">
        ...
    </Style>
</ResourceDictionary>

Было бы полезно увидеть примеры вашего XAML, если это не поможет.

0 голосов
/ 12 июля 2012

Даже у динамических ресурсов есть этот недостаток: они не найдены в соседних объединенных словарях.Но настоящая проблема здесь в шкуре.Что если вы хотите изменить только цвета, но не шаблоны управления - которые, в свою очередь, зависят от этих цветов?

Можно разделить цвета и шаблоны на два файла XAML, но какой файл "Color" XAML долженФайл шаблонов включает, если у вас есть несколько таких цветовых файлов (по одному на скин)?

...