Попытка использовать ResourceDictionary, но стили в нем появляются как не найденные - PullRequest
4 голосов
/ 30 января 2010

У меня есть библиотека классов 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 ]

2 голосов
/ 30 января 2010

Не уверен, помогает ли это точно, но я включаю мои 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>

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

0 голосов
/ 01 февраля 2010

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

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

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

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

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

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

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

...