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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren