在我的类库项目中使用资源字典样式而不合并字典

时间:2014-10-15 17:50:50

标签: wpf resources resourcedictionary

我正在创建一个包含WPF用户控件的类库项目。 我的要求是所有控件都具有相同的样式。我的项目看起来像:

enter image description here

我为解决这个问题所做的一切:

  1. 添加了WPF应用程序 System.Xaml,WindowsBase等所需的所有引用。以便我可以在我的类库项目中使用wpf控件。
  2. AssemblyInfo.cs 中我添加了:

    [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]

  3. 添加 ResourceDictionary1.xaml 添加样式的项目。

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="Brush1" Color="#FF19199E"/>
    </ResourceDictionary>

  4. 现在,如果我想在我的 UserControl1.xaml 上使用一种风格,我会这样做:

    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ResourceDictionary1.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    
    </UserControl.Resources>
    
    <Grid >
        <Rectangle Fill="{StaticResource Brush1}"  />
    </Grid>
    

  5. 我知道它的效果很好,但这里有捕捉。每次我创建一个新的userControl时,我都要合并字典。在常规WPF应用程序上,我可以在App.xaml上合并一次字典,然后我就可以在整个应用程序中使用该字典。 每次创建新的userControl时,如何避免必须合并字典?如果我计划添加新的资源字典,我将不得不转到所有userControl并合并另一个字典。 也许我错误地写了问题标题,我的问题应该是如何将App.xaml文件添加到类库项目

1 个答案:

答案 0 :(得分:-1)

您应该像以下内容一样替换源ResourceDictionary1.xaml

Source="pack://application:,,,/ControlsDLL;component/ResourceDictionary1.xaml">

或者只是简单如下:

<UserControl.Resources>
    <ResourceDictionary Source="pack://application:,,,/ControlsDLL;component/ResourceDictionary1.xaml"></ResourceDictionary>
</UserControl.Resources>