【问题标题】:Using (merged) Resource Dictionary in C# Class Library Project在 C# 类库项目中使用(合并)资源字典
【发布时间】:2016-01-18 07:16:34
【问题描述】:

如何在 C# 类库项目中使用(合并的)WPF 资源字典?

这是我所做的:

在我的 C# 类库项目中,我有一个像这样的文件 Dictionary1.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                >
    <Style x:Key="PluginFrameBorderStyle">
    ...
    </Style>
</ResourceDictionary>

然后,我有一个 UserControl 文件 UserControl1.xaml 我尝试像这样使用字典:

<UserControl x:Class="EditorPackageA.BackboneMemberB1Editor.BackboneMemberB1Editor"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         xmlns:local="clr-namespace:EditorPackageA.EditorBase"
         xmlns:prism="http://www.codeplex.com/prism" d:DesignWidth="690.4" d:DesignHeight="460.12">
<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Dictionary1.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
...
</UserControl>

项目编译但在运行时出现错误:

异常详情:

当应用于 WPF 项目而不是 类库项目时,同样的方法也有效。

这里可能有什么解决方案?

重要附录:

在设计时,我看到了通过 ResourceDictionary 嵌入的所用样式的效果,因此样式的 URI 和字典必须正确!?

【问题讨论】:

    标签: c# wpf xaml resourcedictionary


    【解决方案1】:

    尝试使用所谓的包 URI。我认为您必须明确指定资源字典的位置。

    <ResourceDictionary Source="pack://application:,,,/TheNameOfClassLibrary;component/Dictionary1.xaml"/>
    

    对于 WPF 项目,您的方法有效,因为 WPF 引擎默认在正在执行的程序集中(在 exe 中)查找资源。

    【讨论】:

      【解决方案2】:

      您应该将ResourceDictionary xml 文件引用/链接到带有程序集和组件名称的Source 属性。
      使用相对路径如下:

      <ResourceDictionary Source="../Dictionary1.xaml" /> 
      

      如果它不起作用,请尝试 PACK URL

      <ResourceDictionary Source="pack://application:,,,/Your.Base.AssemblyName;component/DictionaryFolder/Dictionary1.xaml" />
      

      希望对你有帮助

      【讨论】:

        【解决方案3】:

        您可能需要将库的资源字典合并到您的应用程序资源中。您需要编辑 App.xaml 文件并添加如下内容:

        <Application.Resources>
        <ResourceDictionary>
          <ResourceDictionary.MergedDictionaries>
              <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Dictionary1.xaml" />
              </ResourceDictionary.MergedDictionaries>
          </ResourceDictionary>
        </Application.Resources>
        

        【讨论】:

          猜你喜欢
          • 2014-12-10
          • 1970-01-01
          • 1970-01-01
          • 2011-02-07
          • 1970-01-01
          • 2019-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多