gpt4 book ai didi

c# - 如何检测控件上的完整鼠标单击(向下和向上)?

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:30 27 4
gpt4 key购买 nike

在带有 MVVM(并且没有代码隐藏)的 WPF 中,假设我有一个 Rectangle。如果用户点击矩形,我想执行一个 Action 。我实际上希望操作发生在鼠标松开时。 但是,我只希望他们在矩形上执行完全单击(即鼠标按下和鼠标弹起)时触发操作。如果他们点击其他控件,按住鼠标,将其移到矩形上,然后松开鼠标,我不想触发该操作。

MouseDown 事件和 MouseUp 事件,但我实际上想要的是“MouseClick”事件(就像在 WinForms 中一样) .是否有任何内置的鼠标点击事件/触发器/功能?如果没有,解决这个问题的最佳方法是什么?自定义触发器?附加行为?

最佳答案

嗯,它并不完美,但我创建了一个自定义触发器来解决这个问题。如果有人有更好的解决方案,我仍然愿意接受。

public class MouseClickTrigger : TriggerBase<UIElement>
{
private bool _isMouseDown;

protected override void OnAttached()
{
this.AssociatedObject.MouseDown += this.AssociatedObject_MouseDown;
this.AssociatedObject.MouseUp += this.AssociatedObject_MouseUp;
this.AssociatedObject.MouseLeave += this.AssociatedObject_MouseLeave;
}

protected override void OnDetaching()
{
this.AssociatedObject.MouseDown -= this.AssociatedObject_MouseDown;
this.AssociatedObject.MouseUp -= this.AssociatedObject_MouseUp;
this.AssociatedObject.MouseLeave -= this.AssociatedObject_MouseLeave;
}

private void AssociatedObject_MouseDown(object sender, MouseButtonEventArgs e)
{
this._isMouseDown = true;
}

private void AssociatedObject_MouseUp(object sender, MouseButtonEventArgs e)
{
bool fullClick = this._isMouseDown;
this._isMouseDown = false;
if (fullClick)
{
this.InvokeActions(e);
}
}

private void AssociatedObject_MouseLeave(object sender, MouseEventArgs e)
{
this._isMouseDown = false;
}
}

关于c# - 如何检测控件上的完整鼠标单击(向下和向上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27029746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com