2017-09-12 1 views
-1

Gesamtziel ist, dass das Fenster in 1 Sekunde in 0% bis 80% eingeblendet wird, 3 Sekunden lang bei 80% bleibt und dann in 1,5 Sekunden von 80% auf 0% ausblendet. Der Haken ist zu jeder Zeit, wenn der Benutzer über das Fenster mauset, sollte es zu 100% gehen und dort bleiben, solange die Maus über dem Fenster ist. Sobald die Maus das Fenster verlässt, sollte sie sofort auf 80% fallen und das Ausblenden für 1,5 Sekunden beginnen.WPF-Storyboard-Animation

Bisher habe ich bekam:

<Style.Triggers> 
     <EventTrigger RoutedEvent="Window.Loaded"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Duration="00:00:01" Storyboard.TargetProperty="Opacity" From="0.0" To="0.8" /> 
        <DoubleAnimation BeginTime="00:00:04" Duration="00:00:01.5" Storyboard.TargetProperty="Opacity" From="0.8" To="0.0" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Style.Triggers> 

nicht sicher, wo mit der Maus über die Sache zu gehen. Muss ich die ausgeblendete Animation auf ein anderes Ereignis verschieben? Wenn der Benutzer über das Fenster mausiert, wenn es bei etwa 70% ein-/ausblendet, sollte es sofort auf 100% gehen. Wenn die Maus geht, sollte sie auf 80% gehen und dann das Ausblenden nach ein paar Sekunden beginnen. Wenn ich die Animation pausiere oder stoppe, wie würde sie wissen, wo ich anfangen soll?

Antwort

-2

Geben Sie dem Storyboard einen Namen, und greifen Sie auf eine freigegebene Mitgliedsvariable zu. Wenn der Benutzer in das Fenster mouset, rufen Sie das Mitglied Stop auf, um das Storyboard anzuhalten. Setzen Sie die Sichtbarkeit bei Bedarf auf 100%, bis Sie eine Maus-Exit-Benachrichtigung erhalten. Rufen Sie beim Beenden ein anderes Storyboard auf, das die oben beschriebene Geschäftslogik ausführt.

+0

Also müsste ich die 80% auf 0% Animation out an anderer Stelle verschieben? Wie würde das automatisch ausgelöst, wenn der Benutzer niemals über das Fenster mauset? Das alles wäre einfach in Code hinterher zu tun, aber ich versuche, es 100% XAML zu behalten, damit der Benutzer bei Bedarf neu formatieren kann. – SledgeHammer

+0

Ich bin verwirrt, Sie haben nie die 100% Xaml-Anforderung erwähnt. Ehrlich gesagt, welcher Benutzer ist in XAML super kompetent, aber kein Code dahinter? Jede solche Operation kann in einem benutzerdefinierten Steuerelement untergebracht werden und einem Benutzer in jedem realen Szenario übergeben werden (was einem Benutzer erlaubt, es BTW zu * stilisieren). Sie haben zwei Antworten, aber sie beantworten nicht die * akademische * Notwendigkeit dieser Anfrage. – OmegaMan

0

Hier ist der eine. Ändern Sie nach Ihren Bedürfnissen

<Style TargetType="{x:Type Window}"> 
     <Style.Triggers> 
      <EventTrigger RoutedEvent="Window.Loaded"> 
       <BeginStoryboard Name="FadeOutBoard"> 
        <Storyboard> 
         <DoubleAnimation Duration="00:00:01" Storyboard.TargetProperty="Opacity" From="0.0" To="0.8" /> 
         <DoubleAnimation BeginTime="00:00:04" Duration="00:00:01.5" Storyboard.TargetProperty="Opacity" From="0.8" To="0.0" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
      <EventTrigger RoutedEvent="Window.MouseMove"> 
       <StopStoryboard BeginStoryboardName="FadeOutBoard" /> 
      </EventTrigger> 
      <EventTrigger RoutedEvent="Window.MouseLeave"> 
       <SeekStoryboard BeginStoryboardName="FadeOutBoard" /> 
      </EventTrigger> 
     </Style.Triggers> 
    </Style> 
+0

@SledgeHammer ist das nicht für Sie – Ramankingdom

+0

suchen Storyboard im Beispiel wird Ihre Arbeit tun – Ramankingdom