Benutzer mit den meisten Antworten
Verschieben mit Hilfe eines Buttons

Frage
-
Ich habe 4 Navigationsbuttons, mit denen ich ein ContentControl verschieben kann:
<Button x:Name="btnDown" Height="22" Background="#FF0084FF" Click="BtnDownClick" >
Nun möchte ich, wenn ich die Maustaste auf dem Button gedrückt lasse, dass sich das ContentControl stetig verschiebt.
Meine Verschiebung wird über diese Methode ausgeführt:
internal static void Move(UIElement sender, MoveDirection direction) { _senderControl = (ContentControl) sender; switch (direction) { case MoveDirection.Right: ((CompositeTransform)sender.RenderTransform).TranslateX += (20); break; case MoveDirection.Left: ((CompositeTransform)sender.RenderTransform).TranslateX -= (20); break; case MoveDirection.Top: ((CompositeTransform)sender.RenderTransform).TranslateY -= (20); break; case MoveDirection.Down: ((CompositeTransform)sender.RenderTransform).TranslateY += (20); break; default: break; } }
Bisher funktioniert die Verschiebung nur beim Klick, ich möchte die Verschiebung nun aber auch bei gedrückter Maustaste und nicht nur eine einfache Verschiebung, sondern eine stetige, bis ich die Maustaste wieder loslasse.
Ich hoffe, ihr könnt mir bei meinem Problem weiterhelfen :)
Donnerstag, 16. September 2010 08:44
Antworten
-
Viel einfacher. Es gibt ein spezielles Control dafür. Den RepeatButton. Dieser feuert das ClickEvent in einem definierbaren Intervall immer wieder, solange die Maustaste gedrückt bleibt!
http://msdn.microsoft.com/de-de/library/system.windows.controls.primitives.repeatbutton(VS.95).aspx
Viel Erfolg,
Christian~
- Als Antwort vorgeschlagen Daniel Bedarf Montag, 20. September 2010 09:26
- Als Antwort markiert Gizzly Montag, 20. September 2010 12:29
Samstag, 18. September 2010 19:23
Alle Antworten
-
Hallo Gizzle,
ich denke mit einer Kombination von LeftButtonDown und LeftButtonUp könntest du das erreichen.
Man könnte zum Beispiel bei LeftButtonDown einen Timer starten und bei LeftButtonUp beenden. Über den Timer dann das Verschieben auslösen.
Daniel
Silverlight-Community.deDonnerstag, 16. September 2010 11:09 -
Ich habe versucht es mit dem Timer folgendermaßen zu lösen:
private void btnDown_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)<br/> {<br/> _myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);<br/> _myDispatcherTimer.Tick += MyDispatcherTimerTick;<br/> _myDispatcherTimer.Start();<br/> }
Innerhalb des MyDispatcherTimerTick-Events wird die Verschiebung vorgenommen. Dies funktioniert soweit auch recht gut. Der Timer lässt sich aber nicht stoppen, da das MouseLeftButtonUp-Event nicht ausgelöst wird:
private void btnDown_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)<br/> {<br/> _myDispatcherTimer.Stop();<br/> }
Hier nochmal meine Button-Definition:
Ich hoffe, ihr findet meinen Fehler ;)<Button x:Name="btnDown" ClickMode="Hover" MouseLeftButtonDown="btnDown_MouseLeftButtonDown" MouseLeftButtonUp="btnDown_MouseLeftButtonUp" />
Freitag, 17. September 2010 09:04 -
Viel einfacher. Es gibt ein spezielles Control dafür. Den RepeatButton. Dieser feuert das ClickEvent in einem definierbaren Intervall immer wieder, solange die Maustaste gedrückt bleibt!
http://msdn.microsoft.com/de-de/library/system.windows.controls.primitives.repeatbutton(VS.95).aspx
Viel Erfolg,
Christian~
- Als Antwort vorgeschlagen Daniel Bedarf Montag, 20. September 2010 09:26
- Als Antwort markiert Gizzly Montag, 20. September 2010 12:29
Samstag, 18. September 2010 19:23