2009-04-11 106 views
1

我正在嘗試創建自定義滾動條並將圖像用作按鈕。Silverlight:MouseLeftButtonDown定時器重複觸發事件

現在簡單

我可以處理的MouseLeftButtonDown和Up事件就好了,但我想這樣做是同時其按住,每隔多少毫秒的觸發事件。

我試過這樣的東西,但它不是很工作。建議?

public delegate void Changed(RangeScrollButtonControl sender, int value); 
public event Changed OnChanged; 
private System.Threading.Timer Timer; 

private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    this.Timer = new System.Threading.Timer(Timer_Callback, null, 0, 100); 
} 

private void Image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    this.Timer = null; 
} 

private void Timer_Callback(object sender) 
{ 
    if (this.OnChanged != null) 
    { 
     this.OnChanged(this, 1); 
    } 
} 

回答

2

您正在尋找的功能塊是RepeatButton,當按住鼠標按鈕時,這將重複觸發它的Click事件。您可以配置延遲和事件間隔。

然後,您可以樣式該按鈕Silverlight Show

希望這有助於使用的圖像。

0

哪件「不夠用」?

此外,您是否可以重新調整或重新調整Silverlght的滾動條,使其類似於此blog post中的內容,以獲得您所需的內容?

+0

看來Timer對象不是線程安全的,而且我遇到了跨線程異常。解決方案是使用DispatchTimer,現在工作正常。 – Gautam 2009-04-13 14:21:36

0

我會使用Storyboard作爲計時器。例如:

然後你可以做一個MouseSTB.Begin。一旦故事板完成,您可以在MouseSTB.Completeed事件中捕獲它。在這種情況下,你可以做任何你需要做的事情,然後重新開始。它可以很容易地通過在mouseover,mouseenter和mouseleave事件上設置一些標誌進行控制。我在很多地方使用這些定時器,他們工作得很好,而且他們沒有固定處理器。