2009-09-07 6 views
6

Можно ли отобразить Модальное окно из пользовательского элемента управления WPF, являющегося дочерним элементом ElementHost, и установить владельца/родителя модального окна на содержащий элемент управления Form?WPF ShowDialog и ElementHost

Я предполагаю, что вы не можете этого сделать, поскольку свойство Owner принимает экземпляр Window, где я хочу установить его в родительский элемент элемента управления элементом, который является старым элементом формы Windows Forms Form. Просто интересно, есть ли работа или альтернативный подход.

Проблема заключается в том, когда отображается модальное окно и пользователь переключается на другое приложение, а затем обратно, модальное окно скрыто, и пользователь не может взаимодействовать с основным окном. Это связано с тем, что Windows думает, что модальное окно все еще отображается, когда оно отсутствует, так как нет отношения Owner/Parent.

Cheers, James.

ответ

8

Я использую WindowInteropHelper, чтобы решить эту проблему так:

var wpfDialog = new MyWpfDialog(); 
var interopHelper = new WindowInteropHelper(wpfDialog) 
     { 
      Owner = winFormsDialog.Handle 
     }; 

wpfDialog.ShowDialog(); 
+0

Привет, спасибо. Решила мой вопрос. – ayc

4

Я знаю этот пост старый, но я наткнулся на способ найти окно Winform, на котором размещается ElementHost из контекста wpf UserControl, где у вас нет доступа к окну winform. Я нашел, что это полезно, так что мне не нужно пропускать окно хоста.


HwndSource winformWindow = (System.Windows.Interop.HwndSource.FromDependencyObject(wpfControlInElementHost) as System.Windows.Interop.HwndSource); 
if (winformWindow != null) 
{ 
    var interopHelper = new WindowInteropHelper(wpfWindow) 
    { 
     Owner = winformWindow.Handle 
    }; 
}