Попытка использовать 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. Тогда я получил эту концепцию и реорганизовал раздел, и теперь все работает прекрасно.
Спасибо большое!