Forum: PC-Programmierung WPF bei mouse over vergrößern, mit Verzögerung verkleinern


von Leonie (Gast)


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

von Leonie (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.