3

我有一个 WPF 项目,它被编译成一个 dll 并将从另一个应用程序中调用。这就是它的设置方式。在这个 WPF 项目中,我需要从主窗口的视图模型中弹出一个自定义消息框来向用户显示消息。此自定义消息框需要 Window 参数。这就是来龙去脉。

对于 WPF 应用程序,Application.Current.MainWindow将得到我需要的东西。但这里是一个 dll,所以 Application.Current 为空,并导致运行时异常。我也尝试过类似的东西Window.GetWindow(this)。在这里它不起作用,因为“this”是视图模型,所以它不会给我主窗口的句柄。

我还能在这里尝试获取主窗口的句柄吗?

谢谢。

4

1 回答 1

0

一旦获得应用程序 dll,并假设您知道窗口的名称,您就可以通过反射获取并实例化它

string myWpfAssemblyPath = ""; // Enter the path to your application here
Assembly wpfAppAssembly = Assembly.Load(myWpfAssemblyPath);

var MainWindow = (Window)wpfAppAssembly.CreateInstance("myMainWindow");

请注意,这将创建一个新的窗口实例,而不是让您获得已经在运行的窗口的句柄。要获得已经实例化的窗口句柄,您可以使用 WIN32 API。

这里有一些链接可以帮助您做到这一点:

从窗口句柄获取窗口实例

获取应用程序的窗口句柄

http://social.msdn.microsoft.com/Forums/vstudio/en-US/1d7bd916-9bbe-4c76-b9a0-8306159035a1/faq-item-how-to-retrieve-a-window-handle-in-visual-网络

希望这可以帮助

于 2013-09-21T23:16:42.380 回答