Попытка использовать ResourceDictionary, но стили в нем появляются как не найденные

У меня есть библиотека классов Silverlight, которая называется MyClassLibrary.

В нем у меня есть пользовательский элемент управления, который называется MyControl.

В контроле я определяю пользовательские ресурсы:

<UserControl.Resources>
    <Style x:Key="ComboBoxStyle" TargetType="ComboBox">
       (lots of xaml)
    </Style>
</UserControl.Resources>

Элемент управления использует стиль следующим образом:

<ComboBox Style="{ StaticResource ComboBoxStyle }"></ComboBox>

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

Я действительно хочу, чтобы стиль был в словаре ресурсов, чтобы он мог использоваться несколькими различными элементами управления в этой сборке. Поэтому я создаю в ЖЕ сборке словарь ресурсов. Я называю это ResourceDictionary.xaml.

Я перемещаю определение стиля из своего пользовательского элемента управления в словарь ресурсов.

Итак, словарь ресурсов выглядит так:

<ResourceDictionary
xmlns="etc" >
    <Style x:Key="ComboBoxStyle" TargetType="ComboBox">
       (lots of xaml)
    </Style>
</ResourceDictionary>

Пользовательские ресурсы элемента управления теперь выглядят так:

<UserControl.Resources>
    <ResourceDictionary 
     Source="/MyClassLibrary;component/ResourceDictionary.xaml" x:Name="resDict"/>
</UserControl.Resources>

И элемент управления по-прежнему потребляет стиль точно так же, как и раньше.

Теперь я знаю, что он находит файл ResourceDictionary.xaml, потому что я попытался изменить атрибут "Source" на NonExistentFile.xaml, и он пожаловался, что не может найти файл. С ResourceDictionary.xaml такой претензии не возникает, поэтому я предполагаю, что он его нашел.

Однако, когда я запускаю приложение, я получаю сообщение об ошибке "Не удается найти ресурс с именем / ключом ComboBoxStyle".

Что я делаю неправильно? Это кажется таким простым и не работает.

Заранее благодарим за любую помощь, которую вы можете оказать мне.

2 ответа

Не уверен, что это поможет, но я включаю мои ResourceDictionaries в App.xaml:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Sausage/Bangers.xaml"/>
            <ResourceDictionary>
                .. other stuff, e.g.
                <helpers:NotOperatorValueConverter x:Key="NotOperatorValueConverter" />
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Даже если вам не нравится подход, вы можете видеть, что мой Source= отличается от вашего.

Спасибо вам обоим, ваши ответы действительно позволили мне решить эту проблему.

То, что у меня действительно было, было примерно так:

<UserControl.Resources>
  <Style ...> stuff </Style>
</UserControl.Resources>

К которому я потом добавил свой, так это выглядело так

<UserControl.Resources>
  <Style ...> stuff </Style>
  <ResourceDictionary Source="..." />
</UserControl.Resources>

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

Спасибо большое!

Другие вопросы по тегам