【问题标题】:Storyboard Completed Event from Style?故事板从风格完成的事件?
【发布时间】:2023-04-07 21:52:01
【问题描述】:

我是 Storyboard 动画的新手,但我认为这可能是一个问题,我无法通过简单的方法解决。尽管如此,我还是在这里试试运气,也许你们中的一些人知道如何帮助我。

我的场景:我想在我的应用程序中显示一个具有淡入淡出效果的弹出窗口。我也想通过 MVVM 来做到这一点,所以我包装淡入淡出效果和弹出窗口的控件不应该使用代码隐藏,我的应用程序只需要将此控件的数据上下文重置为新的视图模型以显示新消息。

我的问题是我无法确定动画何时完成,因为我需要在样式中设置淡入动画。

我的 XAML 看起来像这样:

<UserControl.Resources>

    <Style x:Key="popupStyle" TargetType="{x:Type Border}" >
        <Style.Triggers>
            <Trigger Property="Visibility" Value="Visible">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard x:Name="FadingStoryBoard">
                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.05" To="1" BeginTime="0:0:1"  Duration="0:0:2.5" >
                                <DoubleAnimation.EasingFunction>
                                    <ExponentialEase Exponent="5" EasingMode="EaseIn" />
                                </DoubleAnimation.EasingFunction>
                            </DoubleAnimation>
                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" BeginTime="0:0:6"  Duration="0:0:8.5" >
                                <DoubleAnimation.EasingFunction>
                                    <ExponentialEase Exponent="15" EasingMode="EaseOut" />
                                </DoubleAnimation.EasingFunction>
                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<Popup Name="Popup" IsOpen="{Binding IsVisible}" Height="{Binding PopupHeight}" Width="{Binding PopupWidth}" VerticalOffset="{Binding PopupVerticalOffset}" HorizontalOffset="{Binding PopupHorizontalOffset}" PopupAnimation="Fade" AllowsTransparency="True">
    <Border Style="{StaticResource popupStyle}" Name="PopupContent" Padding="1" BorderBrush="#000000" Background="AliceBlue" CornerRadius="5" BorderThickness="3,3,3,3">
        <!-- Events -->
        <interact:Interaction.Triggers>
            <interact:EventTrigger EventName="PreviewMouseDown">
                <cmd:EventToCommand Command="{Binding Path=PopupMouseDownCommand}" PassEventArgsToCommand="True" />
            </interact:EventTrigger>
        </interact:Interaction.Triggers>

        <DockPanel Name="ContentContainer" Background="Black" LastChildFill="True">
            <Image Source="{Binding MessageIcon}" DockPanel.Dock="Left" Margin="5,0,5,0" Width="32" Height="32" />
            <StackPanel Background="Transparent" DockPanel.Dock="Right" Margin="3">
                <TextBlock  Name="PopupHeaderTextBlock" Margin="0,3,0,5" TextWrapping="Wrap" FontSize="10" Text="{Binding PopupHeaderText}"  Foreground="White"  Background="Transparent" />
                <TextBlock Name="PopupTextBlock" Text="{Binding PopupText}" TextWrapping="Wrap" FontSize="10" Foreground="White" Background="Transparent" />
            </StackPanel>
        </DockPanel>
    </Border>
</Popup>

谁知道当故事板完成时如何在我的 ViewModel 中获得通知?

【问题讨论】:

    标签: c# wpf xaml mvvm storyboard


    【解决方案1】:

    您可以处理情节提要上的 Completed 事件。 文档在这里:http://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.completed.aspx

    以下是从代码隐藏附加事件的代码: 从构造函数调用:

    private void AttachToCompletedEvent()
    {
        Style popupStyle = Resources["popupStyle"];
        TriggerBase trigger = popupStyle.Triggers[0];
        BeginStoryboard action = trigger.EnterActions[0] as BeginStoryboard;
        Storyboard storyboard = action.Storyboard;
        storyboard.Completed += CompletedEventHandler;
    }
    

    我认为这应该适用于您提供的代码。

    【讨论】:

    • @KoraX 可以在后面的代码中附加事件。我将更新我的答案以显示一个示例。
    • 正如我发布的那样,我使用 MVVM 模式并且无法从代码隐藏中访问情节提要。我考虑过使用这个作为解决方法,但我更喜欢来自 XAML 的解决方案
    • 该问题专门询问有关直接在样式中执行此操作的问题。这个解决方案并没有真正回答这个问题。
    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多