Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过行为中的PreviewMouseLeftButtonDown处理ClickEvent<;框架元素>;_C#_Wpf_Events_Mouseevent_Behavior - Fatal编程技术网

C# 通过行为中的PreviewMouseLeftButtonDown处理ClickEvent<;框架元素>;

C# 通过行为中的PreviewMouseLeftButtonDown处理ClickEvent<;框架元素>;,c#,wpf,events,mouseevent,behavior,C#,Wpf,Events,Mouseevent,Behavior,我有一个行为,我注册了PreviewKeyDown和PreviewMouseLeftButtonDown。我已将此行为附加到菜单项上。现在,当我单击菜单项时,有时仍会调用单击事件,有时则不会。这就像一个时间问题。您对如何解决此问题并停止调用事件有何建议 protected override void OnAttached() { base.OnAttached(); AssociatedObject.PreviewKeyDown += _OnPreviewKeyDown;

我有一个
行为
,我注册了
PreviewKeyDown
PreviewMouseLeftButtonDown
。我已将此
行为
附加到
菜单项
上。现在,当我单击
菜单项
时,有时仍会调用
单击事件
,有时则不会。这就像一个时间问题。您对如何解决此问题并停止调用
事件有何建议

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
。现在我得到了想要的行为

FrameworkElement
没有
ClickEvent
。我想将此
行为
附加到任何
控件
上,并“控制”单击事件。这将是一种“安全行为”。如果用户没有控件的权限(
按钮
菜单项
),则应处理/阻止
单击
,并显示一种“LoginPopup”。