【发布时间】:2015-05-21 18:21:42
【问题描述】:
让我们从头开始。我在 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
我不知道如何解决这个问题。有人知道一些知识可以帮助吗?
【问题讨论】:
-
App.xaml是否加载应该独立于应用程序的启动方式,语义上它仍然是App类的一部分。 -
@H.B.你不明白 - 我将它编译为 dll,所以现在我想像 MyDll.MainWindow window = new MyDll.MainWindow() 一样调用它。没有办法像以前那样加载它。
-
那么你不是简单地将应用程序构建为dll,而是将应用程序转换为组件库,这是另一回事......
-
也许你是对的 - 那么你能给我一些建议如何“简单地将应用程序构建为 dll”吗?一些链接可能吗?我的目标是打开这个应用程序做一些事情并在触发这个的应用程序中 - 检索一些数据。
-
好吧,如果你将它构建为应用程序,唯一的区别是构建的程序集被标记为可执行,并带有一个运行应用程序的入口点。从理论上讲,您也应该能够手动运行应用程序(及其所有功能,包括应用程序全局资源)。以下是在简单控制台应用程序中运行 WPP 应用程序的示例:stackoverflow.com/a/8049984/546730(您当然需要运行特定的
App子类。)您也可以将应用程序构建为 exe,然后直接引用 exe ,可能会更容易配置。
标签: c# wpf xaml resourcedictionary