WPF 帧通过情节提要触发器

本文关键字:触发器 WPF | 更新日期: 2023-09-27 18:36:36

总的来说,我对C#/WPF很陌生,所以我很可能错过了一些东西。

有没有办法通过将在Frame.Navigating事件上触发的故事板来制作Frame动画? 大多数常见的我可以选择,例如Frame.Loaded不是我想要的事件。

编辑:我想知道自定义路由事件是解决此问题的最佳方法吗?

当用户单击按钮时,将调用Frame.Navigate方法并将其加载到新页面中。

我想发生的是...

  • 按钮被单击了
  • (关键帧:0.1 秒)- 帧从 100-0 不透明度淡入淡出
  • (关键帧:0.15 秒)- 使用变换将帧移出画布
  • (关键帧:0.2 秒)- 帧移回屏幕,不透明度恢复到 100%
  • 页面已加载

WPF 帧通过情节提要触发器

这将为您完成。

<Frame x:Name="Frm" Width="499" Height="248" Content="Frame"  Navigating="Frame_Navigating_1" BorderThickness="2" BorderBrush="#FF21BD9A">
    <Frame.RenderTransform>
        <TranslateTransform x:Name="TransTrfm" />
    </Frame.RenderTransform>
    <Frame.Resources>
        <Storyboard x:Key="SbKey">
            <DoubleAnimationUsingKeyFrames  Storyboard.TargetProperty="Opacity">
                <DoubleAnimationUsingKeyFrames.KeyFrames>
                    <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1.0"/>
                    <LinearDoubleKeyFrame KeyTime="0:0:0.1" Value="0"/>
                </DoubleAnimationUsingKeyFrames.KeyFrames>
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames BeginTime="0:0:0.15" Storyboard.TargetProperty="X" Storyboard.TargetName="TransTrfm">
                <DoubleAnimationUsingKeyFrames.KeyFrames>
                    <LinearDoubleKeyFrame  KeyTime="0:0:0" Value="0.0" />
                    <LinearDoubleKeyFrame  KeyTime="0:0:0.17" Value="-1000.0" />
                    <LinearDoubleKeyFrame  KeyTime="0:0:0.2" Value="0.0" />
                </DoubleAnimationUsingKeyFrames.KeyFrames>
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames BeginTime="0:0:0.35" Storyboard.TargetProperty="Opacity">
                <DoubleAnimationUsingKeyFrames.KeyFrames>
                    <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1.0"/>
                </DoubleAnimationUsingKeyFrames.KeyFrames>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </Frame.Resources>
</Frame>

法典:

    Storyboard sb;
    private void Frame_Navigating(object sender, NavigatingCancelEventArgs e)
    {
        if (sb != null)
        {
            sb.Begin();
        }
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        sb = (Storyboard)Frm.Resources["SbKey"];
        Storyboard.SetTargetName(sb, "Frm");
        Frm.Navigate("Page1.xaml");         
    }

还可以尝试使用ControlStoryboardAction行为和ChangePropertyAction行为来避免代码隐藏。