2009-07-27 3 views
6

Я размещаю элемент управления windowsforms в всплывающем окне WPF. Проблемы ниже:WPF Popup и WindowsFormsHost Проблема

  1. Если я сделаю StaysOpen = False, я не могу взаимодействовать с элементом управления winform. StaysOpen для false требуется, потому что, когда щелкнув, отключите область Popup, он должен закрыть.
  2. если я делаю StaysOpen = True, я могу взаимодействовать с элементом управления winform, но когда я выхожу за пределы области всплывающего окна, он не закрывается.
  3. Я попытался установить StaysOpen = true в MouseEnter всплывающего окна и StaysOpen = False в MouseLeave, но MouseLeave срабатывает так же, как и когда мышь находится над управлением winform, что приводит к неожиданному поведению.
  4. Я даже попробовал свойство всплывающего окна IsMouseCaptureWithin и обнаружил, что он не работает с winforms (я думаю, его ошибка в фреймворке).

  5. Другая проблема: я пытался закрыть всплывающее окно, когда основная форма корня (которая является формой окна) деактивирована (нажата Alt + Tab), но это событие (деактивировать) запускается, даже когда я вхожу в один из элементов управления в windowshostControl во всплывающем окне.

Желаемая Поведение:

  1. должен быть в состоянии принять и взаимодействовать с управлением Winform в МОФ всплывающем окне.
  2. при нажатии на внешнюю область всплывающего окна всплывающее окно должно закрываться.

Оцените любые входы.

Спасибо.

ответ

2

У меня было много проблем со стандартными всплывающими окнами в WPF, потому что они на самом деле являются новым окном со своим собственным дескриптором. Это означает, что если вы перетаскиваете приложение по экрану, всплывающее окно остается (оно не перемещается с вашим окном). Это также означает, что ваше всплывающее окно имеет некоторые странные поведения и не взаимодействует с вашим приложением, как обычно это делают другие элементы управления.

Я создал 2 классов декоратора для решения этой проблемы:

PopupDecorator.cs и TimeoutPopupDecorator.cs

Это довольно простое в использовании:

  1. Добавить объявление пространства имен для новых всплывающих классов , т.е.

    XMLNS: dday_wpf = "CLR-пространства имена: DDay.WPF"

  2. Surround область, которую вы хотите, чтобы всплывающее окно, чтобы иметь возможность отображаться с декоратором. т.е.

    < dday_wpf: PopupDecorator х: Name = "всплывающее окно"> < dday_wpf: PopupDecorator.Popup> ... содержимое всплывающего окна идут сюда ... < /dday_wpf:PopupDecorator.Popup> ... содержимое панели go here ... </dday_wpf: PopupDecorator>

Он работает в значительной степени идентично обычной Popup с этого момента.

Это может не решить все ваши проблемы, но, надеюсь, это помогает.

+0

Можете ли вы дать нам некоторые обновленные ссылки? –

+0

Нет проблем, я обновил ссылки, чтобы указать на правильное местоположение. – Doug

0

Это похоже на мою проблему с запуском безмозглого управления winform из формы WPF.

Оформить мой вопрос Why is my WPF textbox "kinda" readonly?.

Просто существо, основанное на том, что Дуг сказал о всплывающих окнах, являющихся окном со своей ручкой, делает это применимым.

Смежные вопросы