Frame控件和跳转
Frame控件
Frame是一个内容控件,提供导航到和显示内容的功能。 Frame可以托管在其他内容中,就像其他控件和元素一样。
常用属性
- Source 设置该控件显示哪个资源,内容可以是任何类型的.NET Framework对象和 HTML 文件。 但是,一般情况下,页面是打包内容以用于导航 (查看 Page)的首选方式
- Source="http://www.baidu.com" 网络路径
- Source="./MyPage.xaml" 相对路径
- NavigationUIVisibility 设置是否展示导航菜单
常用事件
通过以下事件跟踪导航的生命周期
- Navigating:请求新导航时发生。
- Navigated:找到导航的目标内容且可通过 Content 属性得到这些内容时发生,即使尚未加载完毕也是如此
- NavigationProgress:在下载过程中定期发生,用于提供定位进度信息。
- NavigationFailed:在导航到所需内容的同时遇到错误时发生。
- NavigationStopped:在调用 StopLoading() 方法时发生,或者在当前导航正处于进行过程中时又请求一个新导航时发生。
- LoadCompleted:当已加载、分析并开始呈现目标导航内容时发生。
- FragmentNavigation:在开始导航到内容片段时发生,如果所需片段位于当前内容中,则立即发生;如果所需片段位于不同的内容中,则发生在加载源 XAML 内容之后。
编程式导航
经常会需要在窗体中控制它的跳转,就需要使用编程式导航。代码跳转的方式有两种,一种是直接操作`Frame`的`source`属性,另一种是调用`Frame`的`Navigate`方法。
操作source属性
// UriKind:枚举,表示Uri的格式;RelativeOrAbsolute|Absolute|Relative
// 跳转网络路径
this.frame.Source = new Uri("https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.frame?view=windowsdesktop-6.0",UriKind.Absolute);
this.frame.Source = new Uri("./MyPage.xaml", UriKind.Relative);
调用Navigate跳转
this.frame.Navigate(new Uri("./MyPage.xaml", UriKind.Relative)); // 异步导航到由指定的内容统一资源标识符 (URI)。
this.frame.Navigate(new MyPage()); // 异步导航到包含在某个对象的内容。
// 3. 使用 Navigate 跳转,携带参数
MyPage myPage = new MyPage(StudentName); // 向MyPage传递参数
this.frame.Navigate(myPage,"12345"); // 页面跳转传参(我在LoadCompleted事件中接收的)
// 绑定Frame的LoadCompleted事件
private void Frame_LoadCompleted(object sender, NavigationEventArgs e)
{
Console.WriteLine("当已加载、分析并开始呈现目标导航内容时发生。");
object obj = e.ExtraData;
if (obj != null)
{
Console.WriteLine(obj.ToString());
}
}
使用Hyperlink进行跳转,Hypelink控件的NavigateUri属性会自动转换为Uri对象,给控件绑定事件如下即可
Hyperlink hyperlink = (Hyperlink)sender;
frame.Navigate(hyperlink.NavigateUri);