从窗口句柄设置OpenFileDialog的所有者
本文关键字:所有者 OpenFileDialog 设置 窗口句柄 | 更新日期: 2023-09-27 18:01:17
我想设置OpenFileDialog的所有者(在命名空间Microsoft.Win32
而不是System.Windows.Forms
内),但我只有窗口的句柄(IntPtr)(句柄不必来自我的应用程序,它可能是外部的)。
这是可能的还是我被迫使用System.Windows.Forms
中的OpenFileDialog ?
我想达到调用
的效果protected abstract bool RunDialog(IntPtr hwndOwner);
在基类CommonDialog中,但它是受保护的。有别的办法吗?我是否可以使用反射来获取这个方法并执行它,或者是否有一个"清理器"?怎么做呢?
正常的ShowDialog()
方法只允许Window
,这是我没有的。
当我只有句柄时,我使用这段代码来设置其他窗口的所有者,但是WindowInteropHelper
的构造函数只接受Window
和CommondDialog
不继承Window
:
Window window;
IntPtr ownerHwnd;
var wih = new WindowInteropHelper(window);
wih.Owner = ownerHwnd;
我怀疑这个问题仍然是一些 Stack Overflow问题的重复,但是我在快速搜索中没有找到明显的密切匹配的候选问题。So…
您可以通过将HwndSource
的RootVisual
属性值转换为Window
来获得WPF Window
对象:
Window IntPtrToWindow(IntPtr hwnd)
{
HwndSource hwndSource = HwndSource.FromHwnd(hwnd);
return (Window)hwndSource.RootVisual;
}