什么是Frame?
在WinUI3
中,Frame
是用于页面导航
的控件,它类似于一个内容容器,支持在不同Page
之间切换,一般NavigationView就是采用Frame来做页面切换,并且Frame还自带切换动画
,下面是Frame的演示:
在WinUI3中使用它
想要在WinUI3中使用它非常简单,只需要在XAML里定义出来就可以了:
<Frame x:Name="contentFrame" />
关键点在于加载不同的页面,Frame
提供了Navigate
Api用于加载不同的页面,下面是它的一个加载页面的示例:
contentFrame().Navigate(winrt::xaml_typename<App1::BlankPage>());
BlankPage
为你的子Page
,xaml_typename
用于将页面转换成为Navigate
所需要的数据类型,Navigate
需要的是一个包含XAML
元数据的TypeName类型
,而xaml_typename
则是用于将Page
转换成为Navigate
所需要带有XAML元数据的TypeName类型
。
**Tips
使用xaml_typename需要包含#include <winrt/Windows.UI.Xaml.Interop.h>头文件
Navigate接受三个参数:
Windows::UI::Xaml::Interop::TypeName const& sourcePageType: 要加载的页面
IInspectable const& parameter: 给页面传递的参数,需要子页面实现OnNavigatedTo
,一般传递父页面的This
用于与子页面交互
Windows::UI::Xaml::Navigation::NavigationTransitionInfo const& transitionInfo: 页面载入时的动画效果
下面是动画演示:
- EntranceNavigationTransitionInfo 页面从下方边缘滑入,一般用于首次加载,Navigate默认使用该动画效果
- DrillInNavigationTransitionInfo 页面缩放进入
- SlideNavigationTransitionInfo 页面从指定方向进入可以通过Effect设置方向
- SuppressNavigationTransitionInfo 无动画
下面是代码示例:
auto anima= winrt::Microsoft::UI::Xaml::Media::Animation::EntranceNavigationTransitionInfo {};
contentFrame().Navigate(winrt::xaml_typename<App1::BlankPage>(), nullptr, anima);
当使用SlideNavigationTransitionInfo
时可以通过Effect来设置方向:
anima.Effect(SlideNavigationTransitionEffect::FromRight);
SlideNavigationTransitionEffect
取值如下:
enum class SlideNavigationTransitionEffect : int32_t
{
FromBottom = 0,
FromLeft = 1,
FromRight = 2,
};