2014-02-05 3 views
14

Я хочу, чтобы он вел себя так, как вы нажали где-то на приложении. (который разрушает все меню, выпадающие списки и т. д.)Как отклонить все меню, всплывающие окна и т. Д. От 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; 
    } 
} 
+0

Я попытался установить фокус на другие элементы управления, вызвав их метод фокусировки, но это не сработало. – user1004959

+1

Показать, что вы пробовали. Объясните свою проблему более ясной. –

+0

Отредактировано мое сообщение. – user1004959

ответ

1

вы ли попробовать перебрать управление и поднять потеряет событие фокуса?

3

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

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