Autor Beitrag
Cäptin Pommes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 142
Erhaltene Danke: 2



BeitragVerfasst: Do 17.05.12 17:47 
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 142
Erhaltene Danke: 2



BeitragVerfasst: Mo 21.05.12 17:07 
hmm ... niemand der da ma kurz helfen kann :/
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 21.05.12 17:39 
Ein Thumb-Control verfügt doch über MouseLeftButtonDown und MouseLeftButtonUp-Events...
Cäptin Pommes Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 142
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 142
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 142
Erhaltene Danke: 2



BeitragVerfasst: 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:

ausblenden volle Höhe 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)
        {
            //Move the Thumb to the mouse position during the drag operation
            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(0new Duration(TimeSpan.FromMilliseconds(500)));
                    da1.AccelerationRatio = 1;
                    TopBar.BeginAnimation(WrapPanel.HeightProperty, da1);

                    DoubleAnimation da2 = new DoubleAnimation(15new Duration(TimeSpan.FromMilliseconds(500)));
                    da2.AccelerationRatio = 1;
                    TopBarContainer.BeginAnimation(StackPanel.HeightProperty, da2);

                    topBarClosed = true;
                }
                else
                {
                    DoubleAnimation da = new DoubleAnimation(100new Duration(TimeSpan.FromMilliseconds(500)));
                    da.AccelerationRatio = 1;
                    TopBar.BeginAnimation(WrapPanel.HeightProperty, da);

                    DoubleAnimation da2 = new DoubleAnimation(115new 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??
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 25.05.12 14:17 
Du hast es schon selbst fast erkannt: Animations-Werte überschreiben SetValue-Werte.
Aus Interesse: Was genau wird das ganze :) ?

_________________
>λ=
Cäptin Pommes Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 142
Erhaltene Danke: 2



BeitragVerfasst: 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?