Entwickler-Ecke
WPF / Silverlight - mein thumb-control braucht ein click event
Cäptin Pommes - Do 17.05.12 17:47
Titel: mein thumb-control braucht ein click event
hi leute :)
ja ... also ich hab da so ein thumb eingebaut jedoch bräuchte es noch ein click event um seine aufgabe komplett zu erfüllen
von hause aus hat es ja leider keins ... kann man so ein click event bei dem control dennoch irgentwie integrieren?
Cäptin Pommes - Mo 21.05.12 17:07
hmm ... niemand der da ma kurz helfen kann :/
Th69 - Mo 21.05.12 17:39
Ein Thumb-Control verfügt doch über MouseLeftButtonDown und MouseLeftButtonUp-Events...
Cäptin Pommes - Mo 21.05.12 18:27
ja das is schon richtig ... aber das würde doch dann auch immer anspringen wenn man das thumb zieht oder nich?
Th69 - Mo 21.05.12 18:42
Ja, das stimmt natürlich, aber wie stellst du dir denn ein Click-Ereignis vor?
Du könntest dir im MouseDown die aktuelle Thumb-Position merken und im MouseUp überprüfen, ob sich diese nicht verändert hat -> Click-Ereignis.
Wenn du dagegen im MouseDown schon dieses Ereignis haben willst, dann fällt mir nur ein, einen Timer (mit einigen Zehntel-Millisekunden) zu starten - sobald aber der Thumb bewegt wird, den Timer wieder zu stoppen.
Cäptin Pommes - Mo 21.05.12 19:32
ah ok das mit der position merken klingt jut, das werd ich bei gelegenheit ausprobieren
aber mal so rein zu information ... warum wurde bei dem control nich gleich nen Click event mit eingebaut? ich mein die funktionalität gibs doch bei anderen controls hätten die entwickler das nich einfach nur copy&pasten können?
Cäptin Pommes - Fr 25.05.12 11:57
ok das mit dem click funzt wie es soll aber es entsteht ein Nebeneffekt den ich nich verstehe :/
ich hab 2 Eventhändler auf meinen Thumb und für sich alleine funtkionieren beide auch ... ABER sobald ich
private void topBarThumb_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) aufrufe funktioniert in
private void onDragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) die wert-zuweisung von den Heightproperties nich mehr ...
hier erstmal der code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| private void onDragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { double yadjust1 = TopBar.Height + e.VerticalChange; double yadjust2 = TopBarContainer.Height + e.VerticalChange; topBarDraged = true;
if (yadjust1 >= 10) { TopBar.Height = yadjust1; TopBarContainer.Height = yadjust2; } }
private void topBarThumb_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (topBarDraged) { topBarDraged = false; } else { if (!topBarClosed) { DoubleAnimation da1 = new DoubleAnimation(0, new Duration(TimeSpan.FromMilliseconds(500))); da1.AccelerationRatio = 1; TopBar.BeginAnimation(WrapPanel.HeightProperty, da1);
DoubleAnimation da2 = new DoubleAnimation(15, new Duration(TimeSpan.FromMilliseconds(500))); da2.AccelerationRatio = 1; TopBarContainer.BeginAnimation(StackPanel.HeightProperty, da2);
topBarClosed = true; } else { DoubleAnimation da = new DoubleAnimation(100, new Duration(TimeSpan.FromMilliseconds(500))); da.AccelerationRatio = 1; TopBar.BeginAnimation(WrapPanel.HeightProperty, da);
DoubleAnimation da2 = new DoubleAnimation(115, new Duration(TimeSpan.FromMilliseconds(500))); da2.AccelerationRatio = 1; TopBarContainer.BeginAnimation(StackPanel.HeightProperty, da2);
topBarClosed = false; } } } |
wenn ich also zumbeispiel 2 mal nur drauf klicke dann geht mein "menü" zu und wieder auf (das funktioniert tadellos), wenn ich dann aber versuche das Thumb zu ziehen passiert folgendes:
Er springt wie gewohn in die onDragDelta methode und fürt alles aus bis auf (oder zumindest nich richtig) Codezeile 10 und 11.
in TopBar.Height steht dann zum Beispiel 115 und in yadjust1 steht 116 ... nach der zuweisung steht in TopBar.Height allerdings immer noch 115 und nicht 116! So als es schreibgeschützt oder so :/ ... und wie gesagt das passier NUR wenn vorher beim MouseDownEvent die animationen statt gefunden haben
hat jemand irgent ne ahnung was das soll? oder überseh ich hier einfach was banales??
Cäptin Pommes - Fr 25.05.12 14:47
das is so ein selbstgebautes Menüfeld was der user sich so größer oder kleiner ziehen kann, oder auch komplett einfahren (und eben wieder ausfahren)kann
edit: so hab jetzt bei onDragDelta die zuweisungen gegen DubleAnimationen ausgetauscht mit einer Duration von 0 ... find ich zwar nich ganz so schön aber so funzt es scheinbar erstma problemlos ... aber gibs dafür vieleicht noch ne bessere lösung?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!