博客
关于我
Silverlight导航概述
阅读量:538 次
发布时间:2019-03-08

本文共 5190 字,大约阅读时间需要 17 分钟。

Silverlight 应用程序导航指南

导航概念

在开发 Silverlight 应用程序时,导航是确保用户能够在不同页面之间顺利切换的关键功能。本文将详细介绍常见的导航方案,并提供如何将导航功能添加到应用程序的指导。

应用程序导航

在 Silverlight 应用程序中,使用 FramePage 控件可以实现应用程序导航。Page 控件表示内容的分立部分,而 Frame 控件则作为 Page 控件的容器,用于管理页面的切换。Frame 控件的特点是仅显示当前加载的页面内容,当需要切换页面时,可以通过编程方式或用户操作来更新显示的页面。

对于 Silverlight 应用程序,建议将根视觉效果设计为包含可导航内容和固定 UI 组件(如页眉、页脚和导航边栏)的组合。Visual Studio 提供的 "Silverlight 导航应用程序" 模板可以生成包含固定 UI 组件的 XAML 文件,并为可导航内容提供框架支持。

URI 映射

为了实现用户友好的 URI 映射,可以将特定页面的 URI 映射设置为文件路径或占位符段。以下是 URI 映射的示例:

URI 模式 URI 请求示例 解析后的 URI
"/Home" "/Home" "/Views/Home.xaml"
"/{page}" "/About" "/Views/AboutPage.xaml"
"/Product/{category}" "/Product/bikes" "/ContosoShop/Product.xaml?category=bikes"
"/{reporttype}/{month}/{format}" "/Sales/June/Short" "/Views/Reports/Sales.xaml?time=June&show=Short"

URI 映射可以灵活配置,通过定义占位符段和文本值来实现灵活的 URI 映射。请确保 URI 模式按照从具体到一般的顺序添加,以避免冲突。

方便页导航

为了实现页导航,Silverlight 提供了 NavigationService 类,提供了多种导航方式。开发者可以通过设置 Uri 属性或调用 Navigate 方法来实现导航功能。此外,Hyperlink 控件可以用于在应用程序的不同页面之间导航。

Web 浏览器集成导航

对于不嵌套在其他框架中的 Frame 控件,可以选择集成浏览器导航。这种方式允许用户通过浏览器的前进和后退按钮导航到应用程序的不同页面。同时,用户也可以通过直接输入 URI 来访问特定页面,这种方式非常适合需要在浏览器窗口中显示 Silverlight 应用程序的场景。

外部导航

在某些情况下,应用程序需要提供指向外部资源的链接。外部导航可以通过 Hyperlink 控件实现,并且可以根据需要禁用或启用导航功能。为了确保应用程序安全,建议在初始化 Silverlight 插件时设置 enableNavigation 属性为 None,以禁用所有外部导航。

示例

以下是一个使用 URI 映射实现产品详细页面导航的示例代码:

Visual Basic

Partial Public Class ProductDetail    Inherits Page    Public Sub New()        InitializeComponent()    End Sub    Protected Overrides Sub OnNavigatedTo(ByVal e As NavigationEventArgs)        GetProductDetail()        SetButtonVisibility()    End Sub    Private Sub SetButtonVisibility()        If (NavigationService.CanGoBack) Then            BackNavButton.Visibility = Visibility.Visible        Else            BackNavButton.Visibility = Visibility.Collapsed        End If        If (NavigationService.CanGoForward) Then            ForwardNavButton.Visibility = Visibility.Visible        Else            ForwardNavButton.Visibility = Visibility.Collapsed        End If    End Sub    Private Sub BackNavButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)        If (NavigationService.CanGoBack) Then            NavigationService.GoBack()        End If    End Sub    Private Sub ForwardNavButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)        If (NavigationService.CanGoForward) Then            NavigationService.GoForward()        End If    End Sub    Private Sub GetProductDetail()        Dim productID As String        Dim svcContext As DataServiceContext        svcContext = New DataServiceContext(new Uri("AdventureWorks.svc", UriKind.Relative))        If (Me.NavigationContext.QueryString.ContainsKey("ProductId")) Then            productID = Me.NavigationContext.QueryString("ProductId")        Else            productID = App.Current.Resources("FeaturedProductID").ToString()        End If        svcContext.BeginExecute(new Uri("Product(" + productID + ")", UriKind.Relative), AddressOf loadProductCallback, svcContext)    End Sub    Private Sub loadProductCallback(ByVal asyncResult As IAsyncResult)        Dim context As DataServiceContext        context = asyncResult.AsyncState as DataServiceContext        ListBox1.DataContext = context.EndExecute(asyncResult)    End SubEnd Class

C#

public partial class ProductDetail : Page{    public ProductDetail()    {        InitializeComponent();    }    protected override void OnNavigatedTo(NavigationEventArgs e)    {        GetProductDetail();        SetButtonVisibility();    }    private void SetButtonVisibility()    {        if (NavigationService.CanGoBack)        {            BackNavButton.Visibility = Visibility.Visible;        }        else        {            BackNavButton.Visibility = Visibility.Collapsed;        }        if (NavigationService.CanGoForward)        {            ForwardNavButton.Visibility = Visibility.Visible;        }        else        {            ForwardNavButton.Visibility = Visibility.Collapsed;        }    }    private void BackNavButton_Click(object sender, RoutedEventArgs e)    {        if (NavigationService.CanGoBack)        {            NavigationService.GoBack();        }    }    private void ForwardNavButton_Click(object sender, RoutedEventArgs e)    {        if (NavigationService.CanGoForward)        {            NavigationService.GoForward();        }    }    private void GetProductDetail()    {        string productID;        DataServiceContext svcContext = new DataServiceContext(new Uri("AdventureWorks.svc", UriKind.Relative));        if (this.NavigationContext.QueryString.ContainsKey("ProductId"))        {            productID = this.NavigationContext.QueryString["ProductId"];        }        else        {            productID = App.Current.Resources["FeaturedProductID"].ToString();        }        svcContext.BeginExecute(new Uri("Product(" + productID + ")", UriKind.Relative), loadProductCallback, svcContext);    }    private void loadProductCallback(IAsyncResult asyncResult)    {        DataServiceContext context = asyncResult.AsyncState as DataServiceContext;        ListBox1.DataContext = context.EndExecute(asyncResult);    }}

参考资料

本文详细介绍了 Silverlight 应用程序导航的实现方法,包括 URI 映射、页面导航和外部导航等内容。更多技术细节和示例,请参考 官方文档

转载地址:http://eztiz.baihongyu.com/

你可能感兴趣的文章
Access restriction: The type FileURLConnection is not accessible due to restriction
查看>>
Accessibility
查看>>
08-信息收集之端口收集(总结版)
查看>>
15种下载文件的方法&文件下载方法汇总&超大文件下载
查看>>
anaconda、python卸载后重装以及anaconda--443
查看>>
AWVS工具太顶了,漏洞扫描工具AWVS介绍及安装教程
查看>>
CentOS 系列:CentOS 7 使用 virt-install + vnc 图形界面/非图形界面 创建虚拟机
查看>>
CentOS 系列:CentOS 7文件系统的组成
查看>>
CentOS系列:【Linux】CentOS7操作系统安装nginx实战(多种方法,超详细)
查看>>
CSDN----Markdown编辑器
查看>>
Docker部署postgresql-11以及主从配置
查看>>
EnvironmentNotWritableError: The current user does not have write permissions to the target environm
查看>>
Golang起步篇(Windows、Linux、mac三种系统安装配置go环境以及IDE推荐以及入门语法详细释义)
查看>>
Hyper-V系列:windows11开启系统自带安卓虚拟机并安装apk包
查看>>
Hyper-V系列:微软官方文章
查看>>
Java系列:【注释模板】IDEA中JAVA类、方法注释模板教程
查看>>
JS系列(仅供参考):【浏览器编程】浏览器F12调试工具面板详解和JavaScript添加断点
查看>>
Kali 更换源(超详细,附国内优质镜像源地址)
查看>>
kali安装docker(亲测有效)
查看>>
Linux系列:Linux目录分析:[/] + [/usr] + [/usr/local] + [/usr/local/app-name]、Linux最全环境配置 + 动态库/静态库配置
查看>>