Лист Excel «крадет» фокус при нажатии на wpf MenuItem и не выполняет привязку клика - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть VSTO Надстройка для Excel, которая отлично работает, за исключением одного:

Я не могу щелкнуть MenuItem, который торчит на лист Excel - команда щелчка вызывается, когда я щелкаю внутри области 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;
        }
    }
}
...