我有一个故事板在为特定控件触发MouseLeave
时播放动画。
我想在触发MouseLeave
后引入500毫秒的延迟,并检查鼠标是否不再超过控件。然后才能播放控件。如果用户在500毫秒内将鼠标悬停在控件上,则无需播放故事板动画。怎么做到这一点?
答案 0 :(得分:2)
实现您要求的代码
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;
});
});
}
OR 对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();
}
答案 1 :(得分:0)
设置标记bool isMouseOver = true
。在MouseLeave
上设置一个标记为false
,并在MouseEnter
上设置为true
。创建一个方法,如果isMouseOver == false
触发动画,并将其附加到延迟500ms的计时器。计时器本身应在MouseLeave
事件中启动/重置,并在MouseEnter
停止。
编辑:
当然,如果可用,您应该使用IsMouseOver
属性而不是自定义标志。