博客
关于我
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/

你可能感兴趣的文章
tf.tuple
查看>>
Java面试宝典(2020版)
查看>>
2020年云南省专升本 - 「计算机」专业各院校招生计划
查看>>
算法 顺序查找/折半查找/冒泡排序/选择排序(待改)
查看>>
浏览器打开winscp 系统错误。代码:5。 拒绝访问。
查看>>
Kubernetes 无法查询到并且无法删除pod实例的排查过程
查看>>
android中button修改不了背景颜色
查看>>
uniapp自定义弹窗组件|仿微信android/ios弹窗效果
查看>>
(网络安全)主动信息收集 操作系统识别
查看>>
github 入门
查看>>
温故知新,.Net Core遇见Consul(HashiCorp),实践分布式服务注册与发现
查看>>
社区医疗app-Ui设计
查看>>
HTML 表单验证
查看>>
mysql时间为0000-00-00 00:00:00时,程序读取错误
查看>>
ubuntu System program problem detected
查看>>
使用ivx图表组件的经验总结
查看>>
17场演讲,500+嘉宾 |「观远2020智能决策峰会暨产品发布会」看点先知道
查看>>
Redis学习笔记—单个键管理
查看>>
一个简单的游戏框架[汇总]
查看>>
免费好用的证件扫描仪-扫描全能王
查看>>