在行为中通过 PreviewMouseLeftButtonDown 处理 ClickEvent<FrameworkElement>

Handle ClickEvent by PreviewMouseLeftButtonDown in Behavior<FrameworkElement>

我有一个 Behavior<FrameworkElement>,我在其中注册了 PreviewKeyDownPreviewMouseLeftButtonDown。我已将此 Behavior 附在 MenuItem 上。现在,当我单击 MenuItem 时,有时仍会调用 ClickEvent,有时不会。这就像一个时间问题。您对如何解决此问题并停止调用 event 有什么建议吗?

protected override void OnAttached()
{
    base.OnAttached();
    AssociatedObject.PreviewKeyDown += _OnPreviewKeyDown;
    AssociatedObject.PreviewMouseLeftButtonDown += _OnPreviewMouseLeftButtonDown;
}

private void _OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs)
{
    if (!_HasAccess())
        mouseButtonEventArgs.Handled = true;
}

private void _OnPreviewKeyDown(object sender, KeyEventArgs keyEventArgs)
{
    if (!_HasAccess())
        keyEventArgs.Handled = true;
}

我还必须订阅 AssociatedObject.PreviewMouseLeftButtonUp 并设置 handled = true。现在我得到了想要的行为!