2017-07-05 43 views
0

我有一个Behavior<FrameworkElement>,其中我注册了PreviewKeyDownPreviewMouseLeftButtonDown。我已将此Behavior附加在MenuItem上。现在,当我点击MenuItem时,有时ClickEvent仍然被调用,有时不会。这就像是一个计时问题。你有什么建议如何解决这个问题,并停止调用event在Behavior <FrameworkElement>中处理PreviewMouseLeftButtonDown的ClickEvent

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; 
} 
+0

'FrameworkElement'没有'ClickEvent'。我想将这个'Behavior'附加到我想要的任何'Control'并'控制'click事件。 –

+0

这将是一种“SecurityBehavior”。如果用户没有控制权限('Button','MenuItem' ..),应该处理/阻止'Click',并显示一种“LoginPopup”。 –

回答

0

我也不得不订阅AssociatedObject.PreviewMouseLeftButtonUp并设置handled = true。现在我得到了理想的行为!