在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,因为您可能会重新安排您的应用程序,并且可能希望其他窗口成为所有者(例如,当您希望在非根父窗口关闭后立即显示对话框时(