WPF bei mouse over vergrößern, mit Verzögerung verkleinern

Gast #5307795
Lesenswert?
• ▲
▼
Hi,

ich versuch ein Fenster zu vergrößern, wenn ich mit der Maus ein 
bestimmtes Feld Fokussiere, wenn die Maus das Fenster verlässt, soll das 
Fenster verkleinert werden.
In der "Theorie" funktioniert das was ich da zusammen gebastelt habe, in 
der Praxis habe ich wirres vergrößern und verkleinern.
=> was vermutlich daran liegt, dass die Aktionen nicht "abgebrochen" 
werden.
1
<Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="50" Margin="0,50,0,0" Stroke="Black" VerticalAlignment="Top" Width="50">
2
  <Rectangle.Triggers>
3
    <EventTrigger RoutedEvent="UserControl.MouseEnter">
4
      <BeginStoryboard>
5
        <Storyboard>
6
          <DoubleAnimation Storyboard.TargetName="WpfWin"
7
          Storyboard.TargetProperty="Width"
8
          To="500" Duration="0:0:02" AutoReverse="True"
9
          RepeatBehavior="1x" />
10
        </Storyboard>
11
      </BeginStoryboard>
12
    </EventTrigger>
13
    <EventTrigger RoutedEvent="UserControl.MouseLeave" >
14
      <BeginStoryboard>
15
        <Storyboard BeginTime="0:0:05" >
16
          <DoubleAnimation Storyboard.TargetName="WpfWin"
17
          Storyboard.TargetProperty="Width"
18
          To="200" Duration="0:0:02" AutoReverse="True"  
19
          RepeatBehavior="1x" />
20
        </Storyboard>
21
      </BeginStoryboard>
22
    </EventTrigger>
23
  </Rectangle.Triggers>
24
</Rectangle>

ich habe die Verzögerung bereits eingebaut, aber wenn ich jetzt das Feld 
verlasse und sofort wieder in das Feld wechsle, läuft immer noch der 
Timer, welcher dann nach 5 Sekunden wieder das Fenster verkleinert.
=> irgendwie müsste man immer wenn ein Event getriggert wird, alle 
anderen abbrechen!

hat jemand Ideen für mich?

 -leo
Gast #5308042
Lesenswert?
• ▲
▼
hi,

okay, so funktioniert es:

<EventTrigger RoutedEvent="UserControl.MouseEnter">
  <BeginStoryboard>
    <Storyboard>
      <DoubleAnimation Storyboard.TargetName="WpfWin"
      Storyboard.TargetProperty="Width"
      To="500" Duration="0:0:0.1" AutoReverse="False"
      RepeatBehavior="1x" />
    </Storyboard>
  </BeginStoryboard>
</EventTrigger>

aber so im "nachhinein" würde ich gerne das MouseLeave Ereignis nicht am 
Objekt sondern am ganzen Fenster haben...

    <Window.Resources>
        <Style>
            <Style.Triggers>
                <EventTrigger RoutedEvent="UserControl.MouseLeave" >
                    <BeginStoryboard>
                        <Storyboard BeginTime="0:0:1.5" >
                            <DoubleAnimation 
Storyboard.TargetName="WpfWin"
                            Storyboard.TargetProperty="Width"
                            To="50" Duration="0:0:0.1" 
AutoReverse="False"
                            RepeatBehavior="1x" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>

leider beschwert er sich, dass der TargetName im Style so nicht passt:
> Storyboard.TargetName="WpfWin"

was muss ich da ändern?

Vielen Dank

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.