Member 13471521 Ответов: 1

Окно Wpf остается (нежелательным) поверх winform


Привет
У нас есть довольно большое приложение Windows Forms.
Теперь мы хотим постепенно разрабатывать новые функции в WPF windows, в рамках нашего приложения Windows Forms.
Все работает нормально, за исключением того, что окна WPF всегда находятся поверх старых окон WinForm.
И невозможно перетащить активированное окно WinForm поверх окна WPF.
Обе формы не являются модальными, поэтому наши пользователи должны иметь возможность поместить одну WinForm поверх окна WPF, переключаясь между WinForm и окном WPF.

Я подозреваю, что это как-то связано с MdiParent, который у меня есть в моем приложении Windows Forms, и тем фактом, что вы не можете установить окно WPF для этого MdiParent??

Любая помощь будет очень признательна!

Спасибо,
Сара

Что я уже пробовал:

Вот как называется Окно WPF, в данном примере frmArchiefonderdeel:

Dim oFrmArchiefOnderdeel As New frmArchiefonderdeel With {.oSharedData = oSharedData}
   oFrmArchiefOnderdeel.Show(Me)

<Extension()> Public Sub Show(wn As Windows.Window, owner As Windows.Forms.Form)
   BMFUtility.SetOwner(owner, wn)
   ElementHost.EnableModelessKeyboardInterop(wn)

   AddHandler wn.Closed, AddressOf WindowClosed

   wn.ShowInTaskbar = False
   wn.Show()
End Sub

Public Shared Sub SetOwner(owner As System.Windows.Forms.Form, wpfWindow As System.Windows.Window)
   Dim helper As New WindowInteropHelper(wpfWindow)
   helper.Owner = owner.Handle
End Sub


И вот как называется более старая WinForm, в данном примере frmBDGMonitor:
Dim oFrmBDGMonitor As frmBDGMonitor
oFrmBDGMonitor = New frmBDGMonitor
oFrmBDGMonitor.ShowInTaskbar = False
oFrmBDGMonitor.MdiParent = Me
oFrmBDGMonitor.Show()

1 Ответов

Рейтинг:
1

PureNsanity

Здесь есть два важных замечания:

1. В WPF/WinForm взаимодействия очень обидчив - это может быть трудно, чтобы получить полный ожидаемое поведение.

2. WPF не поддерживает MDI, поэтому при попытке использовать взаимодействие WPF с MDI могут возникнуть проблемы несовместимости.

То, что я бы рекомендовал с точки зрения миграции, - это построить новые основные части приложения в WPF и использовать взаимодействие WinForms. Сам MDI тоже как бы избегался с точки зрения пользовательского интерфейса, так что я бы все равно прыгнул на борт с этой тенденцией.

Другая проблема заключается в том, что если вы сначала не создадите свое ядро в WPF, то когда вы начнете проходить миграцию, возникнет множество конфликтов и избыточности.

Кроме того, во время миграции вы должны адаптировать современную разработку составных приложений, чтобы ваши оболочки и фреймворки были основаны на WPF.

Удачи вам!