Wpf中的ResourceDictionary作为dll应用程序

时间:2015-05-21 18:21:42

标签: c# wpf xaml resourcedictionary

让我们从开始吧。我在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代码没有被触发,因为这不再是启动应用程序。有没有办法加载它?

我尝试在代码中手动注册此词典,但没有成功。我还尝试将Build Action从“Page”更改为“Content”,将“Do not copy”更改为“Copy if newer”,但它给了我不同的例外:

'无法从文本'local:ThemedWindow“创建'Type',内部异常”{“类型引用找不到名为'{clr-namespace:GeoLocations.Test的类型} ThemedWindow”。“} 的 (这个异常在ResourceDictionary内被解雇,所以它被加载但是为什么它找不到类型?)。

ThemedWindow是一个继承自Window的类型,后来我的所有窗口继承自ThemedWindow而不是Window

我不知道如何解决这个问题。有人知道要帮忙吗?

1 个答案:

答案 0 :(得分:0)

好的,所以我决定在我的ThemedWindow构造函数中添加我的ResourceDictionary代码。如下所示:

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