我有一个WPF项目,它被编译成一个dll,将从另一个应用程序调用。这就是它的设置方式。 在这个WPF项目中,我需要从主窗口的视图模型中弹出一个自定义消息框,以向用户显示消息。此自定义消息框需要Window参数。这就是来龙去脉。
对于WPF应用程序,Application.Current.MainWindow
将获得我需要的内容。但是这里它是一个DLL,因此Application.Current为null,并导致运行时异常。
我也试过像Window.GetWindow(this)
这样的东西。
这里它不起作用,因为'this'是视图模型,所以它不会给我主窗口的句柄。
我还可以尝试获取主窗口的句柄吗?
感谢。
答案 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
希望这有帮助