WPF OpenFileDialog(Microsoft.Win32)从窗口句柄

时间:2015-07-06 12:59:48

标签: c# wpf

我想设置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;

1 个答案:

答案 0 :(得分:1)

我怀疑这个问题仍然是某些 Stack Overflow问题的重复,但我在快速搜索中找不到明显匹配的候选者。所以......

您可以通过将Window的{​​{1}}属性值转换为RootVisual来获取WPF HwndSource对象:

Window

有关详细信息,请参阅HwndSource Class