Comprendo que esto es una vieja pregunta, pero aquí es un enfoque que podría ser un poco más elegante (y puede o no haber estado disponible antes) ...
using System;
using System.Windows;
using System.Windows.Forms;
// ...
/// <summary>
/// Utilities for easier integration with WinForms.
/// </summary>
public static class WinFormsCompatibility {
/// <summary>
/// Gets a handle of the given <paramref name="window"/> and wraps it into <see cref="IWin32Window"/>,
/// so it can be consumed by WinForms code, such as <see cref="FolderBrowserDialog"/>.
/// </summary>
/// <param name="window">
/// The WPF window whose handle to get.
/// </param>
/// <returns>
/// The handle of <paramref name="window"/> is returned as <see cref="IWin32Window.Handle"/>.
/// </returns>
public static IWin32Window GetIWin32Window(this Window window) {
return new Win32Window(new System.Windows.Interop.WindowInteropHelper(window).Handle);
}
/// <summary>
/// Implementation detail of <see cref="GetIWin32Window"/>.
/// </summary>
class Win32Window : IWin32Window { // NOTE: This is System.Windows.Forms.IWin32Window, not System.Windows.Interop.IWin32Window!
public Win32Window(IntPtr handle) {
Handle = handle; // C# 6 "read-only" automatic property.
}
public IntPtr Handle { get; }
}
}
Entonces , desde la ventana de WPF, puede simplemente ...
public partial class MainWindow : Window {
void Button_Click(object sender, RoutedEventArgs e) {
using (var dialog = new FolderBrowserDialog()) {
if (dialog.ShowDialog(this.GetIWin32Window()) == System.Windows.Forms.DialogResult.OK) {
// Use dialog.SelectedPath.
}
}
}
}
En realidad, d ¿Qué importa?
no estoy seguro si importa en este caso , pero en general, se debe indicar a Windows cuál es la jerarquía de la ventana, por lo que si se hace clic en una ventana padre mientras ventana secundaria es modal, Windows puede proporcionar una pista visual (y posiblemente audible) para el usuario.
Además, se garantiza la ventana "derecho" es en la parte superior cuando hay varias ventanas modales (no es que yo estoy abogando por ejemplo el diseño de UI). He visto UI diseñadas por una determinada corporación multimillonaria (cuyo shell no se menciona), que se colgaron simplemente porque un diálogo modal se "atascó" debajo de otro, y el usuario no tenía ni idea de que estaba allí, y mucho menos de cómo cerrar eso.
Salida de Sven Groot fantástica [Ookii.Dialogs] (http://www.ookii.org/software/dialogs/) tanto para Windows Forms y WPF, que le dan modernos cuadros de diálogo "Vista" carpeta estilo y archivos. –