gpt4 book ai didi

c# - Style 中的 Storyboard已完成事件?

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:07 26 4
gpt4 key购买 nike

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

我的场景:我想在我的应用程序中显示一个具有淡入淡出效果的弹出窗口。我还想通过 MVVM 执行此操作,因此包装淡入淡出效果和弹出窗口的控件不应该使用代码隐藏,我的应用程序应该只需要将此控件的数据上下文重置为新的 View 模型以显示新消息。

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

我的 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>

有人知道如何在 Storyboard 完成后在我的 ViewModel 中收到通知吗?

最佳答案

您可以处理 Storyboard 上的 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;
}

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

关于c# - Style 中的 Storyboard已完成事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com