none
Mit Storyboard eine ListeBox einblenden wenn Liste ein neues Element erhält. RRS feed

  • Frage

  • Hallo,

    ich habe eine Listbox, die in einen Popup ist und diverse Meldungen des Programms anzeigen soll. Jetzt möchte ich gerne, das diese Listbox auf zweierlei angezeigt wird. Wenn das Popup offen ist, soll die Listbox immer eingeblendet sein und alle Elemente dauerhaft anzeigen (mit einer Animation beim hinzu fügen).

    Wenn das Popup geschlossen ist, soll die Liste eingeblendet werden, wenn eine Meldung neu erscheint und diese kurz Anzeigen.

    Ich weiß wie man die einzelnen Elemente einblendet, wenn sie hinzu gefügt werden und auch wieder ausgeblendet werden, aber nur wenn das Popup offen ist. Wie bekomme ich alle oben gennaten bedingungen unter einen Hut?

     <Popup IsOpen="{Binding ShowMessages}" PopupAnimation="Slide"  Width="{Binding ElementName=Dockpanel, Path=ActualWidth}"
                       Placement="Top" PlacementTarget="{Binding ElementName=btnShowMessages}"
                       x:Name="MessageList" 
                       MaxHeight="200"  AllowsTransparency="True"
                       >
                    
                    <ListBox ItemsSource="{Binding Variable.MessageList}" Margin="10,0,10,0"  >
                        <ListBox.Resources>
                            <Style TargetType="{x:Type ListBoxItem}">
                                <Setter Property="LayoutTransform">
                                    <Setter.Value>
                                        <ScaleTransform x:Name="scaleTransform" />
                                    </Setter.Value>
                                </Setter>
                                <Style.Triggers>
                                    <Trigger Property="IsSelected" Value="True">
                                        <Trigger.EnterActions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleX" To="1.2" Duration="0:0:.3" AutoReverse="True"/>
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </Trigger.EnterActions>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </ListBox.Resources>
    
    
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding}"
                               Opacity="0">
                                    <TextBlock.Triggers>
                                        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                                         Duration="00:00:02"
                                                         From="0"
                                                         To="1" />
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </EventTrigger>
                                        <EventTrigger RoutedEvent="FrameworkElement.Unloaded">
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                                         Duration="00:00:02"
                                                         From="1"
                                                         To="0" />
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </EventTrigger>
                                    </TextBlock.Triggers>
                                </TextBlock>
    
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                        <!--<ListBox.ItemContainerStyle>
                            <Style TargetType="{x:Type ListBoxItem}">
                                <Setter Property="LayoutTransform">
                                    <Setter.Value>
                                        <ScaleTransform x:Name="transform" />
                                    </Setter.Value>
                                </Setter>
                                <Style.Triggers>
                                    <EventTrigger RoutedEvent="Loaded">
                                        <EventTrigger.Actions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    
    
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2" />
                                                    <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY" From="0" Duration="0:0:.2"/>
    
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.4" To="1" BeginTime="0:0:15" Duration="0:0:.1"  />
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.4" BeginTime="0:0:16" Duration="0:0:.1"  />
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.4" To="1" BeginTime="0:0:17" Duration="0:0:.1"  />
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.4" BeginTime="0:0:18" Duration="0:0:.1"  />
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.4" To="1" BeginTime="0:0:19" Duration="0:0:.1"  />
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.4" BeginTime="0:0:20" Duration="0:0:.1"  />
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.4" To="1" BeginTime="0:0:21" Duration="0:0:.1"  />
                                                    
                                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" BeginTime="0:0:22" Duration="0:0:2" />
                                                    <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY" BeginTime="0:0:22" From="1.0" To="0" Duration="0:0:2"/>
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </EventTrigger.Actions>
                                    </EventTrigger>
                                </Style.Triggers>
                            </Style>
                        </ListBox.ItemContainerStyle>-->
    
                    </ListBox>
                </Popup>

    Donnerstag, 30. Juli 2015 14:32

Antworten

  • Ich habe jetzt ein UserControl erstellt. Ist zwar nicht toll, weil ich Events jetzt abfange und kein Storyboard verwendet, aber scheint ja nicht anders zu gehen.
    • Als Antwort markiert UrielMhezzek Samstag, 1. August 2015 11:37
    Samstag, 1. August 2015 11:37

Alle Antworten

  • Hallo UrielMhezzek,

    Hast Du versucht, ein benutzerdifiniertes Steuerelement zu erstellen und vielleicht die Ereignisse Opened und Closed des Popups entsprechend zu behandeln? Leider habe ich geringe Erfahrung mit den benutzerdefinierten Steuerelementen in WPF und kann Dir kein Beispiel geben.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 31. Juli 2015 14:27
    Moderator
  • Ich habe jetzt ein UserControl erstellt. Ist zwar nicht toll, weil ich Events jetzt abfange und kein Storyboard verwendet, aber scheint ja nicht anders zu gehen.
    • Als Antwort markiert UrielMhezzek Samstag, 1. August 2015 11:37
    Samstag, 1. August 2015 11:37