尝试使用ResourceDictionary,但其中的样式没有找到

时间:2010-01-29 23:22:34

标签: silverlight resources coding-style resourcedictionary staticresource

我有一个名为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的资源”的错误。

我做错了什么?这看起来很简单,而且无法正常工作。

提前感谢您提供的任何帮助。

2 个答案:

答案 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。所以,我得到了这个概念并重新组织了部分,现在一切都很好。

非常感谢!