Ответ 1
https://documentation.devexpress.com/#wpf/DevExpressXpfBarsBarManager_CloseAllPopupstopic
Поэтому мне пришлось:
MainWindow.Instance.BarManager.CloseAllPopups();
Я хочу, чтобы он вел себя так, как будто вы нажали на приложение. (который разрушает все меню, выпадающие списки и т.д.)
На самом деле, я пытаюсь обойти проблему фокусировки, связанную с взаимодействием, которую вы получаете, когда вы размещаете элементы управления 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;
}
}
https://documentation.devexpress.com/#wpf/DevExpressXpfBarsBarManager_CloseAllPopupstopic
Поэтому мне пришлось:
MainWindow.Instance.BarManager.CloseAllPopups();
Я сделал прототип из вашей проблемы, и все работает (когда я нажимаю внутри Windows Form Host, нарушая комбоксацию WPF и наоборот).
Итак, мы знаем, что собственные средства управления работают так, как ожидалось, проблема может быть из-за используемой вами структуры пользовательского интерфейса.
Пробовали ли вы прокручивать элементы управления и вызывать событие потери фокуса?