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