1

我想设置OpenFileDialog的所有者(不在命名空间内Microsoft.Win32System.Windows.Forms,但我只有窗口的句柄(IntPtr)(句柄不必来自我的应用程序,它可以是外部的)。

这是可能的还是我被迫使用OpenFileDialogSystem.Windows.Forms

我想要调用的效果

protected abstract bool RunDialog(IntPtr hwndOwner);

在基类CommonDialog内,但它受到保护。有办法吗?我可以使用反射来获取此方法并执行它,还是有一种“更清洁”的方法来做到这一点?

普通ShowDialog()方法只允许 a Window,这是我没有的。

当我只有句柄时,我使用此代码设置其他窗口的所有者,但构造函数WindowInteropHelper只接受 aWindow并且CommondDialog不继承自Window

Window window;
IntPtr ownerHwnd;
var wih = new WindowInteropHelper(window);
wih.Owner = ownerHwnd;
4

1 回答 1

1

我怀疑这个问题仍然是一些Stack Overflow 问题的重复,但我在快速搜索中没有找到明显的密切匹配的候选人。所以…

您可以通过将an 的属性值转换为来获取 WPFWindow对象:RootVisualHwndSourceWindow

Window IntPtrToWindow(IntPtr hwnd)
{
    HwndSource hwndSource = HwndSource.FromHwnd(hwnd);

    return (Window)hwndSource.RootVisual;
}

有关详细信息,请参阅HwndSource 类。

于 2015-07-08T17:29:58.023 回答