我希望它的行为就像你在应用程序的某个地方点击一样。 (折叠所有菜单,下拉等)
实际上,我正在尝试解决使用WindowsFormsHost
在WPF应用程序中托管Windows窗体控件时遇到的与互操作性相关的焦点问题:如果DevExpress的WPF菜单/弹出窗口打开并且您单击在Windows窗体控件上,菜单/弹出窗口不会自动被解除。
现在我在WindowsFormsHost
中有很多Windows窗体控件,在WPF区域也有很多DevExpress控件。为了轻松解决这个问题,我添加了一个消息过滤器来挂钩应用程序中的所有点击,然后我看看点击的控件是否是Windows窗体控件。然后我需要做一些事情来使DevExpress的所有WPF菜单等被解雇,如果它们是开放的。
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 :(得分:3)
我根据您的问题制作了原型并且一切正常(当我在Windows窗体中单击时,外部WPF combox崩溃,反之亦然)。
因此我们知道本机控件按预期工作,问题可能是因为您正在使用的UI框架。
答案 1 :(得分:3)
https://documentation.devexpress.com/#wpf/DevExpressXpfBarsBarManager_CloseAllPopupstopic
所以我不得不:
MainWindow.Instance.BarManager.CloseAllPopups();
答案 2 :(得分:1)
您是否尝试循环控制并引发失去焦点事件?