У меня есть VSTO Надстройка для Excel, которая отлично работает, за исключением одного:
Я не могу щелкнуть MenuItem
, который торчит на лист Excel - команда щелчка вызывается, когда я щелкаю внутри области taskPane
, но не сверху области листа Excel.
Пример для MenuItem, который не будет нажимать
![Example to MenuItem that won't click](https://i.stack.imgur.com/PVpii.png)
Кажется, что лист крадет фокус у 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;
}
}
}