我有VSTO Excel加载项,除了这一件事外,它工作正常:
我无法单击突出到Excel工作表的MenuItem
-当我在taskPane
区域内但不在Excel工作表区域顶部单击时,单击命令就会调用。
工作表似乎从UIElement
中夺走了焦点。
我试图通过推送DispacherFrame解决此问题,但它会导致Excel发生不确定性行为-有时效果不错,但有时会卡住,崩溃,禁用过滤器,禁用箭头移动等。 这是调度员的部分代码:
public class DispatcherFrameHelper
{
private readonly List<MenuItem> _menuItems;
private DispatcherFrame _frame;
public DispatcherFrameHelper(List<MenuItem> menuItems)
{
_menuItems = menuItems;
}
public void OnGotFocusEvent(object sender, RoutedEventArgs e)
{
if (_menuItems.Any(p => p == LogicalTreeHelper.GetParent((DependencyObject)e.OriginalSource)))
{
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Normal, (DispatcherOperationCallback)delegate (object unused)
{
if (_frame != null)
_frame.Continue = false;
_frame = new DispatcherFrame();
Dispatcher.PushFrame(_frame);
return null;
}, null);
}
}
public void OnLostFocusEvent(object sender, RoutedEventArgs e)
{
if (_menuItems.Any(p => p == LogicalTreeHelper.GetParent((DependencyObject)e.OriginalSource)))
{
_frame.Continue = false;
}
}
}