wpf中的资源字典作为dll应用程序

本文关键字:dll 应用程序 字典 资源 wpf | 更新日期: 2023-09-27 17:50:27

让我们从头开始。我有一个应用程序在wpf使用我的自定义窗口样式。我在app.xaml中定义这个自定义样式,如下所示:

<Application x:Class="GeoLocations.Test.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ThemedWindowStyle.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

现在有一个要求,我需要构建这个应用程序作为dll,后来从Windows.Forms应用程序调用它。显然,app.xaml代码没有被触发,因为这不再是启动应用程序了。有办法装吗?

我试图在代码中手动注册此字典,但没有成功。我还试图将构建操作从"页面"更改为"内容"answers"不复制"更改为"复制如果更新",但它给了我不同的例外:

'从文本'local:ThemedWindow '创建'Type'失败,内部异常"{"类型引用无法找到名为'{clr-namespace: geollocations . test}ThemedWindow'的类型。"} (这个异常是在ResourceDictionary内部触发的,所以它被加载了,但是为什么它找不到类型?)。

ThemedWindow是一个继承自Window的类型,以后我所有的windows都继承自ThemedWindow而不是Window

我不知道如何解决这个问题。谁有什么知识可以帮忙的?

wpf中的资源字典作为dll应用程序

好的,所以我解决了这个问题,在我的ThemedWindow构造函数后面的代码中添加了我的ResourceDictionary。像下图:

   var rd = new ResourceDictionary();
   rd.Source = new Uri("pack://application:,,,/GeoLocations Screens;component/ThemedWindowStyle.xaml");
   Resources.MergedDictionaries.Add(rd);