2021年WPF FolderBrowserDialog是否需要所有者窗口



在WPF中使用FolderBrowserDialog时,我看到了一些答案,其中需要使用Win32 API来使其成为模态。例如,

在WPF应用中使用FolderBrowserDialog

如何使用WPF应用程序中的FolderBrowserDialog

实际上,Win32 Api真的是必需的吗?我刚刚尝试了FolderBrowserDialog,默认情况下它已经是模态的;简单地调用.ShowDialog((对底层窗口来说已经是模态的了。(其他答案在说什么,或者wpf内部发生了变化?(

编辑:使用Visual Studio 2015与.NET框架(非核心(

实际上,Win32 Api真的需要吗

是。FolderBrowserDialog是通过Win32公开的。如果不以某种方式使用Win32,就无法为Windows编写软件。

我刚刚尝试了FolderBrowserDialog,默认情况下它已经是模态的;简单地调用.ShowDialog((对底层窗口来说已经是模态的了。

这是因为当您调用ShowDialog()时,它会为所有者hWnd参数传递IntPtr.Zero(与C中的NULL相同(。当您通过NULL时,Windows将使用进程中当前活动的窗口作为所有者-因此所有者仍然设置,它只是自动确定:

根据WinForms的ShowDialog()文档(不带owner参数的重载。虽然WinForms和WPF是分开的,但两者的原理相同(:

调用此版本时,当前活动窗口将成为对话框的所有者。如果要指定特定的所有者,请使用此方法的其他版本。

也就是说,您仍然应该在可能的情况下指定所有者hWnd,因为您可能会重新安排您的应用程序,并且可能希望其他窗口成为所有者(例如,当您希望在非根父窗口关闭后立即显示对话框时(

最新更新