Laden...

WPF: Elemente mit der Maus größer "ziehen"

Erstellt von Jooka vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.538 Views
J
Jooka Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren
WPF: Elemente mit der Maus größer "ziehen"

hallo leute, schönes Forum habt ihr hier 😃

ich hab da ein problem zu dem mir kein Lösungsweg einfallen will 😕 ich hoffe ihr könnt mir da weiterhelfen

ich habe versucht sowas wie eine tool bar zu machen die aus einem WrapPanel (da kommt später der inhalt der tool bar rein) besteht und einem Button der direkt unter dem WrapPanel liegt.

Wenn man auf den Button klickt wird die toolbar eingefahren und wenn man nochmal drauf klickt wird sie eben wieder ausgefahren ... soweit klappt das auch

jetzt will ich aber das wenn man den Button gedrückt hält und die Maus nach oben oder unten bewegt sich die Höhe der toolBar ändert ... und genau hier weiss ich nich wie ich das umsetzten soll 😕

hier erstmal mein derzeitiger XAML code:

<StackPanel DockPanel.Dock="Top">
            <WrapPanel Height="100" Name="TopBar">
                <WrapPanel.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="White" Offset="0" />
                        <GradientStop Color="#FFD9E8EF" Offset="1" />
                    </LinearGradientBrush>
                </WrapPanel.Background>
            </WrapPanel>
            <Button Height="15" Name="TopBarBtn" Click="BarBtn_Click" Style="{StaticResource TopBarButton}">
            </Button>
        </StackPanel>

In BarBtn_Click führe ich die ein- und ausfahr animation durch

N
135 Beiträge seit 2006
vor 11 Jahren

Evtl. mit MouseMove und prüfen der gedrückten Maustaste

J
Jooka Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren

hmm gut danke ich bin schon nen ganzes stück weiter!
also theoretisch funktioniert es sogar wie es soll mit einer ausnahme!

Wenn ich die toolbar ein-/ausgefahren habe ändert der die Height nicht mehr wenn ich es wieder größer oder kleiner ziehen will ... ich bin den debug modus schritt für schritt durch gegangen und er springt auch über all rein wie er soll und auch die werte stimmen alle ... nur das er es einfach in der Height nicht ändert 😕
also wenn die Height 100 ist und 1 hinzu addiert wird weil ich die maus runter ziehe bleibt es einfach bei 100!

ich poste mal die animation und die MouseMove

Animation:

case "TopBarBtn":
                    {
                        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;
                            TopBarStackPanel.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;
                            TopBarStackPanel.BeginAnimation(StackPanel.HeightProperty, da2);

                            topBarClosed = false;
                        }
                    }
                    break;

MouseMove:

private void TopBarBtn_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                double MouseY = Mouse.GetPosition(this).Y;

                if (lastMousePosY != -1)
                {
                    double YposToAdd = MouseY - lastMousePosY;

                    if (MouseY > lastMousePosY)
                    {
                        TopBar.Height += YposToAdd;
                        TopBarStackPanel.Height += YposToAdd;
                    }
                    else if (MouseY < lastMousePosY)
                    {
                        if (TopBar.Height + YposToAdd >= 10)
                        {
                            TopBar.Height += YposToAdd;
                            TopBarStackPanel.Height += YposToAdd;
                        }
                    }
                }
                lastMousePosY = MouseY;
            }

            label1.Content = lastMousePosY;
        }

        private void TopBarBtn_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            lastMousePosY = -1;
        }
925 Beiträge seit 2004
vor 11 Jahren

Guck dir nebenbei mal das "Thumb" Control an! Das hat mir schon an so mancher Stelle weitergeholfen, wo es darum ging, mit der Maus irgendwas zu verschieben.

J
Jooka Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren

hmm naja aber thump hat kein click event 😕 das brauch ich um die toolbar ein und ausfahren zu können