上下文菜单打开时不会升级



我知道有几个相关问题,但是这些问题都没有帮助我找到问题。

大多数答案建议实现canecutechanged,如本答案所示。好吧,那不是解决我的问题的方法。我已经实施了类似于乔什·史密斯(Josh Smith)的插入的接力司令。(类似,因为我们的实施添加了更多详细信息,但核心实施是相同的。)

在搜索互联网时,我还了解到,如果没有重点元素,该路由将停在上下文中,并且不会到达Menuitem。在此处显示的一种解决方案。
但是,我检查了Snoop是否确实没有任何重点元素,并且了解到这不是问题。而且修复程序无济于事。
此外,我在测试项目中模拟了这个问题,并能够修复它。因此,修复程序通常有效,只是没有帮助我。但是,我认为仍然有机会稍微调整修复程序才能使其正常工作。我尝试了MyControl而不是ContextMenu作为祖先类型,但我尝试了PlacementTarget.Tag,而不是PlacementTarget作为Path,但我不知道该尝试使它起作用了(假设这是错误)。

)。

有趣的是,当我致电CommandManager.invalidaterequerysuggested()手动时,它甚至行不通。我添加了一个在上下文模型上提出的命令。我认为这会迫使canecute被执行,但看来我误会了。

所以,我现在正在寻找进一步的原因,为什么打开ContextMenu以及如何修复CanExecute处理程序。

这是我的XAML代码(包括EventTrigger的CC_7):

<MyControl>
  <MyControl.ContextMenu>
    <ContextMenu>
      <MenuItem Header="..."
                Command="{Binding MyCommand}"
                CommandParameter="{Binding}"
                CommandTarget="{Binding Path=PlacementTarget,
                  RelativeSource={RelativeSource
                    AncestorType={x:Type ContextMenu}}}"/>
    </ContextMenu>
  </MyControl.ContextMenu>
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="ContextMenuOpening">
      <i:InvokeCommandAction Command="{Binding OnContextMenuOpening}" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</MyControl>

这是MyCommand的定义和(CAN)执行处理程序:

internal static readonly ICommandEx MyCommand = 
  new RelayCommand(OnMyCommand, OnCanMyCommand);
private static void OnMyCommand(object parameter) { ... }
private static bool OnCanMyCommand(object parameter) { ... }

这是我的OnContextMenuOpening处理程序,我试图强制MyCommand的canexecute升级:

private static void OnContextMenuOpening(object parameter)
{
  CommandManager.InvalidateRequerySuggested();
}

您在ContextMenu控件上的OnContextMenuOpening上错误地侦听。它永远不会开火!相反,请在MyControl控件上听此事件。

相关内容

  • 没有找到相关文章

最新更新