Silverlight: таймер MouseLeftButtonDown для многократного запуска события - PullRequest
1 голос
/ 11 апреля 2009

Я пытаюсь создать собственную полосу прокрутки и использую изображения в качестве кнопки.

На данный момент простой

Я могу нормально обрабатывать события 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);
    }
}

Ответы [ 3 ]

2 голосов
/ 15 апреля 2009

Функциональность, которую вы ищете, - это RepeatButton, она будет запускать событие Click несколько раз, пока нажата кнопка мыши. Вы можете настроить задержку и интервал событий.

Затем вы можете использовать эту кнопку для стилизации изображения на Silverlight Show

Надеюсь, это поможет.

0 голосов
/ 13 апреля 2009

Я бы использовал раскадровку в качестве таймера. Что-то вроде:

Тогда вы можете сделать MouseSTB.Begin. Как только раскадровка закончена, вы можете поймать ее в событии MouseSTB.Completeed. В этом случае вы можете сделать то, что вам нужно, а затем просто начать все заново. Это можно легко контролировать, установив некоторые флаги на события mouseover, mouseenter и mouseleave. Я использую эти таймеры во многих местах, и они работают просто отлично, и они не привязывают процессор.

0 голосов
/ 13 апреля 2009

Какая часть "не совсем работает"?

Кроме того, не могли бы вы изменить стиль или пересмотреть полосу прокрутки Silverlght, как показано в этом блоге , чтобы получить то, что вам нужно?

...