So I needed to show a modal WPF window from inside a Visual Studio Extension. To do that, I needed two thing: 1. a handle of the Visual Studio window and 2. a conversion from the window handle to something compatible with WPF. Long story short – voila:
public static bool ShowDialog(Window dialog) { // Get the top-level Visual Studio object. var dte = (DTE)Package.GetGlobalService(typeof(SDTE)); // Get the handle to Visual Studio's main window var hwnd = dte.MainWindow.HWnd; // WindowInteropHelper converts betwen WPF and Win32 var helper = new WindowInteropHelper(dialog); // Now we can use the main window's handle as the owner of our dialog helper.Owner = new IntPtr(hwnd); // From here on, everything is pure WPF again var dialogResult = dialog.ShowDialog(); return dialogResult.HasValue && dialogResult.Value; }