单击wpf MenuItem时Excel工作表“窃取”焦点,并且不执行单击绑定

时间:2018-11-05 17:12:27

标签: excel wpf focus vsto menuitem

我有VSTO Excel加载项,除了这一件事外,它工作正常:

我无法单击突出到Excel工作表的MenuItem-当我在taskPane区域内但不在Excel工作表区域顶部单击时,单击命令就会调用。

>

不会单击的MenuItem示例

Example to MenuItem that won't click

工作表似乎从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;
        }
    }
}

0 个答案:

没有答案