1

J'essaie de créer une barre de défilement personnalisée et j'utilise des images comme bouton.Silverlight: le temporisateur MouseLeftButtonDown déclenche à plusieurs reprises un événement

Pour l'instant simple

Je peux gérer l'événement MouseLeftButtonDown et juste bien, mais ce que je voudrais faire est tout en son lieu vers le bas, tout autant de milliseconde déclencher un événement est déclenché.

J'ai essayé quelque chose comme ça mais ça ne marche pas vraiment. Suggestions?

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

Répondre

2

La fonctionnalité que vous recherchez est un RepeatButton, cela déclenchera son événement Click à plusieurs reprises alors que le bouton de la souris est maintenu enfoncé. Vous pouvez configurer le délai et l'intervalle des événements.

Vous pouvez ensuite le style de ce bouton pour utiliser l'image au Silverlight Show

Hope this helps.

0

Quel morceau "ne fonctionne pas tout à fait"?

En outre, pourriez-vous relooker ou retoucher la barre de défilement de Silverlght de façon similaire à ce qui est vu dans ce blog post pour obtenir ce dont vous avez besoin?

+0

Il est apparu que l'objet Timer n'était pas compatible avec les threads et que je rencontrais des exceptions de threads croisés. La solution consistait à utiliser DispatchTimer et ça fonctionne bien maintenant. – Gautam

0

J'utiliserais un Storyboard comme une minuterie. Quelque chose comme:

Ensuite, vous pouvez faire un MouseSTB.Begin. Une fois le storyboard terminé, vous pouvez l'attraper dans l'événement MouseSTB.Completeed. Dans ce cas, vous pouvez faire ce que vous avez à faire et ensuite recommencer. Il peut facilement être contrôlé en définissant des drapeaux sur les événements mouseover, mouseenter et mouseleave. J'utilise ces minuteries dans beaucoup d'endroits et ils fonctionnent très bien et ils n'arrêtent pas le processeur.