Ich weiß, das eine alte Frage, aber hier ist ein Ansatz, der etwas elegantere sein könnte (und kann oder nicht, bevor vorhanden gewesen sein kann) ...
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; }
}
}
Dann , aus dem WPF-Fenster, können Sie einfach ...
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.
}
}
}
}
Eigentlich d ist es wichtig?
Ich bin mir nicht sicher, ob es in diesem Fall zählt, aber im Allgemeinen sollten Sie Windows sagen, was ist Ihr Fenster Hierarchie, so dass, wenn ein übergeordnetes Fenster geklickt wird, während Kind Fenster modal sind, Windows-a zur Verfügung stellen kann visueller (und möglicherweise hörbarer) Hinweis für den Benutzer.
Außerdem sorgt sie für das „richtige“ Fenster oben ist, wenn mehrere modale Fenster sind (nicht, dass ich eine solche UI-Design bin befürworten). Ich habe UIs um ein bestimmtes Multi-Milliarden-Dollar-Unternehmen (die Schale bleiben unbenannt), dass gehängt, nur weil ein modaler Dialog bekam „stecken“ unter einem anderen entworfen gesehen, und Benutzer hatte keine Ahnung, es selbst dort war, geschweige denn, wie zu schließen es.
Schauen Sie sich Sven Groot fantastische [Ookii.Dialogs] (http://www.ookii.org/software/dialogs/) für beide WinForms und WPF, die Ihnen moderne „Vista“ Stil-Ordner und Dateidialoge geben. –