2014-02-18 31 views
0

我有一個故事板播放動畫時MouseLeave觸發了特定的控制。添加延遲鼠標離開故事板

我想MouseLeave被觸發後,引入500毫秒的延遲,並檢查鼠標在控制不再。只有然後播放控件。如果用戶在500毫秒內將鼠標移回控件上,我不需要播放故事板動畫。如何實現這一目標?

+0

這都可以在XAML來完成。只需將故事板的開始時間設置爲00:00:00.5,並在鼠標進入控制時停止故事板。 – Silvermind

回答

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; 
     }); 
    }); 
} 

點播爲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(); 
} 
+0

使用'as'鑄造對象而不是null-檢查它是不可接受的。另外 - 我認爲每次鼠標返回到uiElement時,應該停止/重置觸發該方法。在你的答案中,只有在第一次出現「OnMouseLeave」1000毫秒後才檢查一次,所以在這1000毫秒內退出並用鼠標指針去掉會被忽略。 – Tarec

+0

@Tarec我編輯了我的答案 –

+1

我現在將其標記爲答案。 – Tarec

0

設置一個標誌​​。在MouseLeave上設置標誌爲false,在MouseEnter上設置爲true。創建一個方法,如果isMouseOver == false觸發動畫,並將其附加到具有500ms延遲的定時器。計時器本身應該在MouseLeave事件上啓動/復位,並在MouseEnter上停止。

編輯: 當然,您應該使用IsMouseOver屬性而不是自定義標誌(如果可用)。