我有一个故事板播放动画时MouseLeave
触发了特定的控制。添加延迟鼠标离开故事板
我想MouseLeave
被触发后,引入500毫秒的延迟,并检查鼠标在控制不再。只有然后播放控件。如果用户在500毫秒内将鼠标移回控件上,我不需要播放故事板动画。如何实现这一目标?
我有一个故事板播放动画时MouseLeave
触发了特定的控制。添加延迟鼠标离开故事板
我想MouseLeave
被触发后,引入500毫秒的延迟,并检查鼠标在控制不再。只有然后播放控件。如果用户在500毫秒内将鼠标移回控件上,我不需要播放故事板动画。如何实现这一目标?
代码来实现您的要求
private void UIElement_OnMouseLeave(object sender, MouseEventArgs e)
{
var uiElement = sender as UIElement;
uiElement.MouseLeave -= UIElement_OnMouseLeave;
Task.Factory.StartNew(() =>
{
Thread.Sleep(1000); // or 500ms
Dispatcher.Invoke(() =>
{
if (!uiElement.IsMouseOver)
{
// Animation Code Goes Here;
}
uiElement.MouseLeave += UIElement_OnMouseLeave;
});
});
}
点播或为Tarec
private readonly DispatcherTimer _dispatcherTimer = new DispatcherTimer
{
Interval = new TimeSpan(0,0,0,0,1000),
};
_dispatcherTimer.Tick += (sender, args) =>
{
_dispatcherTimer.Stop();
if (!uIElement.IsMouseOver)
{
// Animation Code Goes Here;
}
};
private void UIElement_OnMouseLeave(object sender, MouseEventArgs e)
{
// Reset Timer if Mouse Leave
_dispatcherTimer.Stop();
_dispatcherTimer.Start();
}
设置一个标志。在MouseLeave
上设置标志为false
,在MouseEnter
上设置为true
。创建一个方法,如果isMouseOver == false
触发动画,并将其附加到具有500ms延迟的定时器。计时器本身应该在MouseLeave
事件上启动/复位,并在MouseEnter
上停止。
编辑: 当然,您应该使用IsMouseOver
属性而不是自定义标志(如果可用)。
这都可以在XAML来完成。只需将故事板的开始时间设置为00:00:00.5,并在鼠标进入控制时停止故事板。 – Silvermind