从 window 句柄设置 OpenFileDialog 的所有者
Set owner of OpenFileDialog from window handle
我想设置 window 的 OpenFileDialog (within namespace Microsoft.Win32
not System.Windows.Forms
) but I only have the handle (IntPtr) 的所有者(句柄不必来自我的应用程序,它可以是外部的)。
这可能吗,还是我被迫使用 System.Windows.Forms
中的 OpenFileDialog?
我要调用的效果
protected abstract bool RunDialog(IntPtr hwndOwner);
在基地 class CommonDialog 内,但它受到保护。有办法解决吗?我可以使用反射来获取此方法并执行它,还是有一种“更干净”的方法来做到这一点?
普通的ShowDialog()
方法只允许Window
,这是我没有的。
当我只有句柄时,我使用此代码设置其他 window 的所有者,但是 WindowInteropHelper
的构造函数只需要一个 Window
和 CommondDialog
不继承自 Window
:
Window window;
IntPtr ownerHwnd;
var wih = new WindowInteropHelper(window);
wih.Owner = ownerHwnd;
我怀疑这个问题仍然是 some Stack Overflow 问题的重复,但我在快速搜索中没有找到明显匹配的候选人。所以……
您可以通过将 HwndSource
的 RootVisual
属性 值转换为 Window
来获得 WPF Window
对象:
Window IntPtrToWindow(IntPtr hwnd)
{
HwndSource hwndSource = HwndSource.FromHwnd(hwnd);
return (Window)hwndSource.RootVisual;
}
有关详细信息,请参阅 HwndSource Class。
我想设置 window 的 OpenFileDialog (within namespace Microsoft.Win32
not System.Windows.Forms
) but I only have the handle (IntPtr) 的所有者(句柄不必来自我的应用程序,它可以是外部的)。
这可能吗,还是我被迫使用 System.Windows.Forms
中的 OpenFileDialog?
我要调用的效果
protected abstract bool RunDialog(IntPtr hwndOwner);
在基地 class CommonDialog 内,但它受到保护。有办法解决吗?我可以使用反射来获取此方法并执行它,还是有一种“更干净”的方法来做到这一点?
普通的ShowDialog()
方法只允许Window
,这是我没有的。
当我只有句柄时,我使用此代码设置其他 window 的所有者,但是 WindowInteropHelper
的构造函数只需要一个 Window
和 CommondDialog
不继承自 Window
:
Window window;
IntPtr ownerHwnd;
var wih = new WindowInteropHelper(window);
wih.Owner = ownerHwnd;
我怀疑这个问题仍然是 some Stack Overflow 问题的重复,但我在快速搜索中没有找到明显匹配的候选人。所以……
您可以通过将 HwndSource
的 RootVisual
属性 值转换为 Window
来获得 WPF Window
对象:
Window IntPtrToWindow(IntPtr hwnd)
{
HwndSource hwndSource = HwndSource.FromHwnd(hwnd);
return (Window)hwndSource.RootVisual;
}
有关详细信息,请参阅 HwndSource Class。