我想设置 OpenFileDialog 的所有者(在命名空间 Microsoft.Win32
内,而不是 System.Windows.Forms
),但我只有窗口的句柄( IntPtr )(句柄不必是从我的应用程序来看,它可能是外部的)。
这可能吗,还是我被迫使用 OpenFileDialog来自System.Windows.Forms
?
我想要达到调用的效果
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 问题的重复,但我在快速搜索中没有找到明显的密切匹配的候选者。所以……
您可以通过将 HwndSource
的 RootVisual
属性值强制转换为 Window
来获取 WPF Window
对象:
Window IntPtrToWindow(IntPtr hwnd)
{
HwndSource hwndSource = HwndSource.FromHwnd(hwnd);
return (Window)hwndSource.RootVisual;
}
参见HwndSource Class了解更多详情。
关于c# - 从窗口句柄设置 OpenFileDialog 的所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31246563/