如何在wpf中处理窗口?

时间:2013-09-20 15:02:04

标签: wpf

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

对于WPF应用程序,Application.Current.MainWindow将获得我需要的内容。但是这里它是一个DLL,因此Application.Current为null,并导致运行时异常。 我也试过像Window.GetWindow(this)这样的东西。 这里它不起作用,因为'this'是视图模型,所以它不会给我主窗口的句柄。

我还可以尝试获取主窗口的句柄吗?

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

以下是一些可以帮助您完成此操作的链接:

Get Window instance from Window Handle

Get Application's Window Handles

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

希望这有帮助