我想设置OpenFileDialog的所有者(在命名空间 Microsoft.Win32 而不是 System.Windows.Forms 中),但我只有窗口的句柄(IntPtr)(句柄不必来自我的应用程序,它可能是外部的。)
这是可能还是我被迫使用 System.Windows.Forms 中的OpenFileDialog?
基本上我很乐意运行
protected abstract bool RunDialog(IntPtr hwndOwner);
在基类CommonDialog内部,但遗憾的是它受保护有没有办法解决?我可以使用反射来获取此方法并执行它,或者是否有“更清洁”的方法来执行此操作。
“普通”ShowDialog方法只需要一个Window,这是我没有的。
当我只有句柄时,我使用此代码设置其他窗口的所有者,但WindowInteropHelper的构造函数只接受一个窗口而CommondDialog不从窗口继承:
Window window;
IntPtr ownerHwnd;
var wih = new WindowInteropHelper(window);
wih.Owner = ownerHwnd;
答案 0 :(得分:1)
我怀疑这个问题仍然是某些 Stack Overflow问题的重复,但我在快速搜索中找不到明显匹配的候选者。所以......
您可以通过将Window
的{{1}}属性值转换为RootVisual
来获取WPF HwndSource
对象:
Window
有关详细信息,请参阅HwndSource Class。