2016-07-25 11 views
1
maximiert

Ich bin ein Gleiten in Animation Anwendung, wenn das Fenster mit dem folgenden Code geladen wird:Fenster Animation geladen, wenn Fenster Zustand

<Window.Triggers> 
    <EventTrigger RoutedEvent="Window.Loaded"> 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard BeginTime="0" Duration="0:0:1"> 

        <DoubleAnimation Storyboard.TargetName="parent" Storyboard.TargetProperty="(Window.Left)" From="1920" To="0" AutoReverse="true" BeginTime="0:0:0" Duration="0:0:1" /> 
       </Storyboard> 
      </BeginStoryboard> 


     </EventTrigger.Actions> 
    </EventTrigger> 
</Window.Triggers> 

Es funktioniert gut, aber wenn ich Window = „maximiert“ ermöglichen das Hauptfenster, Die Animation funktioniert nicht.

Antwort

1

Das ist eine Einschränkung in Windows, nicht WPF - Sie können die Position eines Fensters nicht ändern, wenn es maximiert ist. Die Animation wird tatsächlich ausgeführt (der Wert Left ändert sich), hat jedoch keine Auswirkungen.

Was Sie tun können, ist das Fenster animieren, während es in der Normal Zustand ist und maximiert es, wenn die Animation beendet:

<Window x:Class="WpfApp.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:app="clr-namespace:WpfApp" 
     Name="parent" 
     WindowState="Normal" 
     Top="0" 
     Left="{x:Static SystemParameters.FullPrimaryScreenWidth}" 
     Width="{x:Static SystemParameters.FullPrimaryScreenWidth}" 
     Height="{x:Static SystemParameters.FullPrimaryScreenHeight}" 
     d:DataContext="{d:DesignData ViewModel}"> 
    <Window.Triggers> 
     <EventTrigger RoutedEvent="Window.Loaded"> 
      <EventTrigger.Actions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="parent" 
             Storyboard.TargetProperty="(Window.Left)" 
             To="0" 
             Duration="0:0:1" /> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetName="parent" 
                 Storyboard.TargetProperty="WindowState"> 
          <DiscreteObjectKeyFrame Value="{x:Static WindowState.Maximized}" 
                KeyTime="0:0:1" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger.Actions> 
     </EventTrigger> 
    </Window.Triggers> 

Hinweis Dieser Code wird nur richtig für Systeme mit einem einzigen Monitor arbeiten. Andernfalls müssten Sie alle Werte für Bildschirmbreite/-höhe mit der Windows Forms-Klasse Screen initialisieren.

Verwandte Themen