Надлежащее использование Объединенных Словарей Ресурса в Silverlight 3

Поскольку я читал: http://msdn.microsoft.com/en-us/library/cc903952 (По сравнению с 95) .aspx, конкретно раздел маркировал "Forward References With a ResourceDictionary":

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

Делает это означает, что я не могу сделать чего-то вроде этого в своем App.xaml:


    
        
            
            
        
    

Где Brushes.xaml содержит SolidColorBrush, LinearColorBrush, и т.д., определения, которые относятся к цветам, определенным в Colors.xaml?

например.


?

Я определяю свои цвета в Colors.xaml как:

#FFBF3C1F

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

Что является лучшими практиками для организации Цветов и Кистей, таким образом, они могут быть снова использованы (в соответствующих случаях, и я понимаю, что цвета являются структурами, и кисти являются ссылочными объектами, объясненными в http://weblogs.manas.com.ar/spalladino/2009/03/02/silverlight-xaml-guidelines/),

Спасибо грабит

7
задан Kirk Broadhurst 27 October 2011 в 05:57
поделиться

2 ответа

Роб,

Я понимаю документацию так же, как и вы.Я заметил, что также можно поменять местами MergedDictionaries, подобным образом, и по-прежнему получать то же исключение времени выполнения:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Assets/Brushes.xaml"/>
            <ResourceDictionary Source="Assets/Colors.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Из документации в разделе «Объединенные словари ресурсов»:

С точки зрения последовательности поиска , словарь MergedDictionaries проверяется только после проверки всех ключевых ресурсов ResourceDictionary, который объявил MergedDictionaries. Затем каждый из словарей в MergedDictionaries проверяется в порядке, обратном тому, в котором они объявлены в свойстве MergedDictionaries. Другими словами, логика извлечения из коллекции объединенных словарей ресурсов выполняется в последнюю очередь - в первую очередь.

Похоже, что вы можете переопределить определенные ключи, определенные в ResourceDictionaries, включив их в этом порядке, но вы не можете ссылаться на стиль из одного словаря, определенного перед другим в поисковой последовательности. Это расстраивает и не интуитивно понятно.

Думаю, это было бы полезно, если бы у вас была коллекция «синих» стилей и вы хотели бы заменить их набором «оранжевых» стилей для другого клиента. Вы можете добиться этого, включив оранжевые ключи под синими ключами в вашу коллекцию MergedDictionaries, чтобы они были найдены первыми в последовательности поиска ресурсов.

В любом случае, я разделяю ваше разочарование и надеюсь на появление такой функции в ближайшем будущем.

3
ответ дан 7 December 2019 в 01:20
поделиться

Теперь я понимаю это немного яснее . Если у вас есть несколько ресурсов области приложения, которые иногда ссылаются друг на друга, вам необходимо (1) упорядочить их в главном словаре, объявленном в App.xaml, И вам необходимо включить в каждый файл раздел, который втягивает зависимые части. Так что, если у меня есть три файла, например, Brushes.xaml, ScrollViewerStyles.xaml и ComboBoxStyles.xaml, а ComboBoxStyles.xaml зависит от первых двух, мне нужно просто добавить в начало этого файла:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Brushes.xaml"/>
    <ResourceDictionary Source="ScrollViewerStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
7
ответ дан 7 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: