我试图在鼠标输入按钮时显示一个弹出窗口。
如果用户离开弹出窗口,则应该隐藏。
但是为了获得良好的用户体验,如果用户返回按钮,弹出窗口也应保持打开状态。
因此,当鼠标离开弹出窗口时,会触发鼠标离开事件,但如果鼠标在同一时刻进入按钮,我不想处理它。
有没有办法知道鼠标离开事件中鼠标是否超过另一个控件?
我尝试了许多不同的方法而没有成功。告诉我你是否也有不同的解决方法!
答案 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>