简介 我有一个WPF应用程序。 当我单击/双击按钮以显示下一个屏幕时,将使用MouseLeftButtonDown和MouseLeftButtonUp捕获。 - MouseLeftButtonDown使按钮变暗 - MouseLeftButtonUp将我发送到下一个屏幕
问题: 如果我“垃圾”或有时只是点击按钮上的2-3次(我们说这种情况下是3次),它就会开始加载下一个屏幕。当显示下一个屏幕时,队列中会留下两次鼠标点击,如果鼠标位于第二个屏幕上的另一个新按钮上,则会点击该按钮。
我试过像:
这样的东西 void LayoutRoot_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Mouse.OverrideCursor = Cursors.Wait;
if (this.IsVisible && this.IsLoaded)
OnButtonPatient();
}
但两个属性都设置为true。 我想那是正确的,因为我可以在鼠标事件触发时看到按钮。 这些事件可以解释为:
我该如何处理? 我不希望在之前的屏幕上发生鼠标事件,然后继续我的下一个屏幕。 问候!
答案 0 :(得分:1)
我尝试使用StackPanel作为控件的一个简单示例。虽然我不确定为什么你没有使用按钮点击事件,如果你使用按钮(为什么要按下ButtonUp?)
private int count = 0;
private void StackPanel_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (count == 0 && (sender as StackPanel).IsMouseOver)
{
Mouse.OverrideCursor = Cursors.Wait;
count++;
}
e.Handled = true;
}
private void StackPanel_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (count == 1 && (sender as StackPanel).IsMouseOver)
{
Mouse.OverrideCursor = Cursors.Arrow;
count++;
}
e.Handled = true;
}
答案 1 :(得分:0)
我建议在MouseUp事件触发时检查第一个窗口/屏幕上的IsMouseOver属性。这样可以过滤掉新窗口阻塞第一个窗口的事件。
void LayoutRoot_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Mouse.OverrideCursor = Cursors.Wait;
if (this.IsVisible && this.IsLoaded && this.IsMouseOver)
OnButtonPatient();
}