在带MVVM的WPF中(没有代码隐藏),说我有一个Rectangle
。如果用户点击矩形,我想执行一个动作。我实际上希望在鼠标上进行操作。 然而,我只想在矩形上执行完全点击(即鼠标向下和鼠标向上)时触发操作。如果他们点击其他控件,按下鼠标,将其移到矩形上,然后释放鼠标,我不想要触发操作。
有MouseDown
事件和MouseUp
事件,但我真正想要的是“MouseClick
”事件(就像在WinForms中一样)。是否有任何内置的鼠标点击事件/触发器/某些功能?如果没有,最好的办法是什么?定制触发器?附加行为?
答案 0 :(得分:1)
嗯,它并不完美,但我创建了一个自定义触发器来解决问题。如果有人有,我仍然愿意接受任何更好的解决方案。
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;
}
}
答案 1 :(得分:0)
Whaaaaat ???我不是你的问题...为什么你不能做这样的事情:
private bool isMouseDownInRect = false;
<Rectangle Width="100" Height="100" MouseUp="UIElement_OnMouseUp" MouseDown="UIElement_OnMouseDown" Fill="Black"></Rectangle>
private void UIElement_OnMouseUp(object sender, MouseButtonEventArgs e)
{
if (isMouseDownInRect)
{
// My code
}
isMouseDownInRect = false;
}
private void UIElement_OnMouseDown(object sender, MouseButtonEventArgs e)
{
isMouseDownInRect = true;
}
我希望这就是你所要求的。
编辑:
别忘了处理mouse_enter / leave事件......