在行为中通过 PreviewMouseLeftButtonDown 处理 ClickEvent<FrameworkElement>
Handle ClickEvent by PreviewMouseLeftButtonDown in Behavior<FrameworkElement>
我有一个 Behavior<FrameworkElement>
,我在其中注册了 PreviewKeyDown
和 PreviewMouseLeftButtonDown
。我已将此 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
。现在我得到了想要的行为!
我有一个 Behavior<FrameworkElement>
,我在其中注册了 PreviewKeyDown
和 PreviewMouseLeftButtonDown
。我已将此 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
。现在我得到了想要的行为!