当我处理MouseLeave事件时,找出我的鼠标在哪里?

时间:2011-01-26 16:44:16

标签: silverlight timer

我试图在鼠标输入按钮时显示一个弹出窗口。

如果用户离开弹出窗口,则应该隐藏。

但是为了获得良好的用户体验,如果用户返回按钮,弹出窗口也应保持打开状态。

因此,当鼠标离开弹出窗口时,会触发鼠标离开事件,但如果鼠标在同一时刻进入按钮,我不想处理它。

有没有办法知道鼠标离开事件中鼠标是否超过另一个控件?

我尝试了许多不同的方法而没有成功。告诉我你是否也有不同的解决方法!

2 个答案:

答案 0 :(得分:2)

在弹出窗口中的MouseLeave事件被触发时设置一个计时器,以及一个布尔值(可能称为closingPopup)到true。计时器会将closingPopup设置为false并隐藏弹出窗口。在按钮的MouseEnter事件上,如果closingPopup为true,则停止计时器并将布尔值设置为false。

那个或那个的变体应该能得到你想要的东西。你可以用这种方式延迟1/4秒。或任何看似响应的数量。

编辑:您可能还应该为该按钮添加相同的检查MouseLeave。 (很高兴,我可以帮忙!)

答案 1 :(得分:2)

这可以通过在鼠标离开按钮时启动计时器来实现,当计时器滴答时,关闭弹出窗口。如果鼠标重新进入按钮,请停止计时器。

private DispatcherTimer timer = new DispatcherTimer();

public MainPage()
{
  InitializeComponent();

  timer.Interval = TimeSpan.FromSeconds(1);
  timer.Tick += Timer_Tick;
}

private void Timer_Tick(object sender, EventArgs e)
{
  MyPopUp.IsOpen = false;
  timer.Stop();  
}

private void Button_MouseEnter(object sender, MouseEventArgs e)
{
  timer.Stop();      
  MyPopUp.IsOpen = true;
}

private void Button_MouseLeave(object sender, MouseEventArgs e)
{
  timer.Start();
}

使用以下标记:

  <Button MouseEnter="Button_MouseEnter" MouseLeave="Button_MouseLeave">
    <Popup x:Name="MyPopUp">          
      <Grid Width="100" Height="20" Background="Red">
        <TextBlock Text="Hi"/>
      </Grid>
    </Popup>        
  </Button>