我有资源字典文件(MenuTemplate。xaml, ButtonTemplate。xaml等),我想在多个单独的应用程序中使用。我可以将它们添加到应用程序的程序集中,但如果我在一个程序集中编译这些资源并让我的应用程序引用它会更好,对吗?

资源程序集构建后,如何在应用程序的App.xaml中引用它?目前我使用ResourceDictionary。合并各个字典文件。如果我在一个程序集中有它们,我如何在xaml中引用它们?


当前回答

UWP:

<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />

其他回答

UWP:

<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />

举个例子,让这个15秒的答案

说你有“风格”。在一个名为common的WPF库中,你想在你的主应用程序项目中使用它:

添加一个从主项目到“公共”项目的引用 你的app.xaml应该包含:


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

我正在使用。net 4.5,不能让这个工作…我正在使用WPF自定义控件库。这最终对我有用……

<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />

来源:http://social.msdn.microsoft.com/forums/en us/wpf/thread/11a42336 - 8 d87 - 4656 - 91 - a3 - 275413 - d3cc19

检查包的URI语法。你想要这样的东西:

<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>

使用XAML:

如果你知道其他程序集结构,并且想要c#代码中的资源,那么使用下面的代码:

 ResourceDictionary dictionary = new ResourceDictionary();
 dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute);
 foreach (var item in dictionary.Values)
 {
    //operations
 }

输出:如果我们想使用ResourceDictionary RD1。项目WpfControlLibrary1的xaml到StackOverflowApp项目。

项目结构:

资源字典:

代码的输出:

PS:所有ResourceDictionary文件都应该有“资源”或“页面”的构建动作。

使用c#:

如果有人想要纯c#代码的解决方案,然后看看我的这个 解决方案。