我有一个名为MyClassLibrary的Silverlight类库。
在其中,我有一个名为MyControl的用户控件。
在控件中我定义了用户资源:
<UserControl.Resources>
<Style x:Key="ComboBoxStyle" TargetType="ComboBox">
(lots of xaml)
</Style>
</UserControl.Resources>
控件使用如下样式:
<ComboBox Style="{ StaticResource ComboBoxStyle }"></ComboBox>
这一切都很完美,ComboBox提供了正确的风格,所以我知道风格写得正确。
我真正想要的是将样式放在资源字典中,以便它可以被此程序集中的几个不同控件使用。所以我在SAME程序集中创建了一个资源字典。我称之为ResourceDictionary.xaml。
我将Style定义从我的用户控件移动到资源字典。
那么资源字典看起来像这样:
<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的资源”的错误。
我做错了什么?这看起来很简单,而且无法正常工作。
提前感谢您提供的任何帮助。
答案 0 :(得分:2)
不确定这是否有帮助,但我在App.xaml中包含了我的ResourceDictionaries:
<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 =与您的不同。
答案 1 :(得分:0)
谢谢你们两位,你的答案确实让我解决了。
我真正拥有的是这样的:
<UserControl.Resources>
<Style ...> stuff </Style>
</UserControl.Resources>
然后我加入了我的所以它看起来像这样
<UserControl.Resources>
<Style ...> stuff </Style>
<ResourceDictionary Source="..." />
</UserControl.Resources>
现在这个编译非常美丽,但只是不会运行。我不明白我需要使用MergedDictionaries。所以,我得到了这个概念并重新组织了部分,现在一切都很好。
非常感谢!