04 Frame控件和跳转

发布时间 2023-12-06 09:52:46作者: 讨厌敲代码的老郭

04 Frame控件和跳转

Frame控件

Frame 是一个内容控件,提供导航到和显示内容的功能。 Frame 可以托管在其他内容中,就像其他控件和元素一样。

常用属性

  • Source 设置该控件显示哪个资源,内容可以是任何类型的.NET Framework对象和 HTML 文件。 但是,一般情况下,页面是打包内容以用于导航 (查看 Page) 的首选方式

  • 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);