Laden...

MainWindow animieren über XAML nicht möglich?

Erstellt von HiJack82 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.402 Views
H
HiJack82 Themenstarter:in
19 Beiträge seit 2014
vor 6 Jahren
MainWindow animieren über XAML nicht möglich?

Ich versuche das MainWindow meiner Anwendung über XAML zu animieren.
Konkret versuche ich das MainWindow bei MouseOver über XAML zu vergrößern und zu verschieben.

Auf der Suche nach Beispielen und Tutorials wurde ich leider nicht fündig. Alle Beispiele beziehen sich auf das Animieren von Elementen innerhalb des MainWindows.

Kann es sein, dass das MainWindow über XAML gar nicht selbst animiert werden kann?

709 Beiträge seit 2008
vor 6 Jahren

Doch, das geht.

    <Window.Style>
        <Style TargetType="{x:Type Window}">
            <Style.Triggers>
                <EventTrigger RoutedEvent="MouseEnter">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Width" To="400" />
                            <DoubleAnimation Storyboard.TargetProperty="Height" To="400" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>

                <EventTrigger RoutedEvent="MouseLeave">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Width" To="200" />
                            <DoubleAnimation Storyboard.TargetProperty="Height" To="200" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Window.Style>
H
HiJack82 Themenstarter:in
19 Beiträge seit 2014
vor 6 Jahren

Super, danke!
Das hatte ich gesucht.

Leider verhält sich das bei mir ziemlich blöd.

Einmal schrumpft das Fenster bei MouseLeave in der Höhe zurück und manchmal bleibt es einfach in voller Höhe dargestellt. Manchmal wird es aber auch gar nicht ausgeklappt. Das Animieren der Width Eigenschaft passt eigentlich immer.

Wie kann es denn zu so einem nicht deterministischen Verhalten kommen?

Ich hätte die Realisierung einer einfachen Fensteranimation eher als Stärke von WPF gesehen. Das Verhalten ist für mich aber sehr "strage".


<Window x:Class="AppBar.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AppBar"
        mc:Ignorable="d"
        Title="AppBar" Height="2" Width="1520" ResizeMode="NoResize" Topmost="True" AutomationProperties.Name="AppBar"
        WindowStyle="None" WindowStartupLocation="Manual" Left="200" Top="0">
       
    <Window.Style>
        <Style TargetType="{x:Type Window}">
            <Style.Triggers>
                <EventTrigger RoutedEvent="MouseEnter">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Width" To="1920" />
                            <DoubleAnimation Storyboard.TargetProperty="Left" To="0"/>
                            <DoubleAnimation Storyboard.TargetProperty="Height" To="200" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>

                <EventTrigger RoutedEvent="MouseLeave">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Width" To="1520" />
                            <DoubleAnimation Storyboard.TargetProperty="Left" To="200" />
                            <DoubleAnimation Storyboard.TargetProperty="Height" To="2" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Window.Style>
    
    <Grid Background="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}">

    </Grid>
</Window>