WPF学习笔记3. Navigation
2010-10-11 16:02:19 来源:WEB开发网互联网的兴起,造就和培养了一种新的用户交互界面 —— Page & Navigation。无论是前进、后退还是页面,都完全是一个全新的门类,不同于以往的 SDI/MDI。WPF 或者是它的简化版 Silverlight 都不可避免地遵从了这种改良的 B/S 模式,使用 URI 来串接 UI 流程。
NavigationService、Page、Hyperlink、Journal(日志/历史记录) 是 WPF 整个导航体系的核心。NavigationService 提供了类似 IE Host 的控制环境,Journal 可以记录和恢复相关 Page 的状态,我们通常会选用的宿主方式包括:Browser(XBAP) 和 NavigationWindow。
1. NavigationWindow
NavigationWindow 继承自 Window,不知什么原因,我并没有在 VS2008 "New Item..." 中找到相关的条目,只好自己动手将一个 Window 改成 NavigationWindow。
Window1.xaml
<NavigationWindow x:Class="Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300" WindowStartupLocation="CenterScreen" Source="Page1.xaml"> </NavigationWindow>
Source 属性指定了该窗口的默认页面,当然,我们还要修改一下 Window1.xaml.cs 里的基类。
public partial class Window1 : NavigationWindow { public Window1() { InitializeComponent(); } }
创建一个 Page1.xaml,我们就可以像普通 Window 那样添加相关的控件和操作。
2. Hyperlink
超链接应该是我们最熟悉的一种导航方式。
Page1.xaml
<Page x:Class="Learn.WPF.Page1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Page1"> <Grid> <TextBlock> <Hyperlink NavigateUri="Page2.xaml">Page2</Hyperlink> </TextBlock> </Grid> </Page>
NavigateUri 相当于 "Html a.href",当然我们也可以使用 Hyperlink.Click 事件,然后使用 NavigationService 来完成导航操作。
Page1.xaml
<Hyperlink Click="Hyperlink_Click">Page2</Hyperlink> Page1.xaml.csprivate void Hyperlink_Click(object sender, RoutedEventArgs e) { this.NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative)); }
Hyperlink 还支持 "test.htm#name" 这样的导航定位方式,滚动页面直到某个特定名称的控件被显示。Hyperlink 的另外一个实用属性是 Command,我们可以使用 NavigationCommands 中创建的一系列静态成员来执行一些常用操作。
<Hyperlink Command="NavigationCommands.Refresh">Refresh</Hyperlink> <Hyperlink Command="NavigationCommands.BrowseBack">BrowseBack</Hyperlink> <Hyperlink Command="NavigationCommands.BrowseForward">BrowseForward</Hyperlink>
赞助商链接