Как отклонить все меню, всплывающие окна и т.д. От DevExpress программно, чтобы обойти проблему, связанную с WindowsFormsHost?

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

На самом деле, я пытаюсь обойти проблему фокусировки, связанную с взаимодействием, которую вы получаете, когда вы размещаете элементы управления Windows Forms в приложении WPF с помощью WindowsFormsHost: если меню/всплывающее меню WPF от DevExpress открыто, и вы нажимаете на Windows Forms, меню/всплывающее окно автоматически не отбрасывается.

Теперь у меня много элементов управления Windows Forms в WindowsFormsHost, а также множество элементов управления DevExpress в области WPF. Чтобы обойти это легко, я добавил фильтр сообщений, чтобы зацепить все клики в приложении, а затем я вижу, был ли элемент управления кликом элементом управления Windows Forms. Затем мне нужно что-то сделать, чтобы все меню WPF и т.д. DevExpress были уволены, если они были открыты.

GlobalMouseHandler globalClick = new GlobalMouseHandler();
System.Windows.Forms.Application.AddMessageFilter( globalClick );

GlobalMouseHandler:

public class GlobalMouseHandler : System.Windows.Forms.IMessageFilter
{
  private const int WM_LBUTTONDOWN = 0x201;
  private const int WM_RBUTTONDOWN = 0x204;

  public bool PreFilterMessage( ref System.Windows.Forms.Message m )
  {
    if( m.Msg == WM_LBUTTONDOWN || m.Msg == WM_RBUTTONDOWN )
    {
      var c = System.Windows.Forms.Control.FromHandle( m.HWnd );

      if( c != null )
        // TODO: CLOSE ALL WPF MENUS ETC
        // Didn't work: MainWindow.Instance.ARandomControl.Focus();
    }

    return false;
  }
}

Ответы

Ответ 2

Я сделал прототип из вашей проблемы, и все работает (когда я нажимаю внутри Windows Form Host, нарушая комбоксацию WPF и наоборот).

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

Ответ 3

Пробовали ли вы прокручивать элементы управления и вызывать событие потери фокуса?