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%
- 页面已加载
这将为您完成。
<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
行为来避免代码隐藏。