WPF学习之路(九)导航链接

Hyperlink

WPF中超链接类型是Hyperlink,除了能在页面之间导航,还能再同一个页面下进行段落导航

实例:

<Grid>
    <FlowDocumentReader>
        <FlowDocument>
            <Section LineHeight="25" FontSize="15">
                <List>
                    <ListItem>
                        <Paragraph>
                            <Hyperlink NavigateUri="CustomPage.xaml#first">
                                First Paragraph
                            </Hyperlink>
                        </Paragraph>
                    </ListItem>
                    <ListItem>
                        <Paragraph>
                            <Hyperlink NavigateUri="CustomPage.xaml#second">
                                Second Paragraph
                            </Hyperlink>
                        </Paragraph>
                    </ListItem>
                </List>
            </Section>
            <Paragraph x:Name="first" FontSize="20" Background="AliceBlue">
                1. First paragraph content
            </Paragraph>
            <Paragraph x:Name="second" FontSize="20" Background="AliceBlue">
                2. Second paragraph content
            </Paragraph>
            <Paragraph>
                <Hyperlink NavigateUri="SimplePage.xaml" >
                    Hello WPF
                </Hyperlink>
            </Paragraph>
        </FlowDocument>
    </FlowDocumentReader>
</Grid>

如果页面寄宿窗口不是NavigationWindow,超链接是无法导航的

通过编写代码导航

在某些情况下Hyperlink不能实现,需要通过NavigationService来实现

1.导航需要传值

2.导航到页面之前要设置属性

3.运行时才知道要导航到哪个页面

实例:

DemoPage.xaml

<Page.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="FontSize" Value="15" />
        <Setter Property="Margin" Value="5" />
    </Style>
</Page.Resources>
<StackPanel>
    <TextBlock>
        Navigate to
        <Hyperlink x:Name="link1" Click="link_click">
            SimplePage.xaml
        </Hyperlink>
    </TextBlock>
    <TextBlock>
        Navigate to
        <Hyperlink x:Name="link2" Click="link_click">
            SimplePage.xaml
        </Hyperlink>
        (Call a constructor with parameter)
    </TextBlock>
    <TextBlock>
        Navigate to
        <Hyperlink x:Name="link3" Click="link_click">
            .Net Object
        </Hyperlink>
    </TextBlock>
    <TextBlock>
        Navigate to site
        <Hyperlink x:Name="link4" Click="link_click">
            http://www.bing.com
        </Hyperlink>
    </TextBlock>
</StackPanel>
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override string ToString()
    {
        return "Name: " + Name + "\nAge: " + Age;
    }
}

Page.xaml.cs

private void link_click(object sender, RoutedEventArgs e)
{
    Hyperlink link = sender as Hyperlink;
    if (link == link1)
    {
        NavigationService.Navigate(new Uri("pack://application:,,,/SimplePage.xaml"));
    }
    else if (link == link2)
    {
        NavigationService.Navigate(new SimplePage("Hello Navigation"));
    }else if (link == link3)
    {
        NavigationService.Navigate(new Person() { Name = "Alex", Age = 25 });
    }
    else if (link == link4)
    {
        NavigationService.Navigate(new Uri("http://www.bing.com"));
    }
}

其他导航方式

导航工具栏

导航命令

添加Button控制导航,相当于自定义导航工具栏

<Button Height="50" Width="100" Content="Back" Command="NavigationCommands.BrowseBack" />
<Button Height="50" Width="100" Content="Forward" Command="NavigationCommands.BrowseForward" />

历史记录

WPF中Jaurnal记录了每一次导航操作,从而实现导航工具栏的功能

Journal 包含两个数据栈用来记录前进和后退页面的显示状态,每个相关 Page 都会对应一个 JournalEntry。日志状态自动恢复仅对单击导航条上前进后退按钮有效。

To be continue...

时间: 2024-09-30 12:23:57

WPF学习之路(九)导航链接的相关文章

WPF学习之路(八)页面

传统的应用程序中有两类应用程序模式:桌面应用,Web应用.WPF的导航应用程序模糊了这两类应用程序的界限的第三类应用程序 WPF导航表现为两种形式,一是将导航内容寄宿于窗口,二是XAML浏览器应用程序 四个核心要素:Page\HyperLink\NavigationServices\Journal Page WPF中的Page相比Window来说更加的精简,没有提供一个Show或者是Hide的方法,而是通过链接的方式进行页面切换.一般来说Page不设置自身的大小,因为页面的尺寸由包含它的宿主窗体

WPF学习之路(一) 初识WPF

参考<葵花宝典-WPF自学手册> VS2012 先创建第一个WPF小程序 1.创建WPF程序 2.查看Solution,WPF中xaml文件和cs文件经常成对出现 两个主要的类:APP(WPF主程序) MainWindow(程序主窗口) 3.添加Button和Click事件 MainWindow.xaml <Grid> <Button Content="Hello WPF" Margin="5" Click="Button_C

Wpf学习之路……

Wpf是 .net中一门做winform的技术,和传统的winform的区别在于: 1.         原来的winform就是拖控件,而wpf的控件都死自己拿标记语言(xaml)来写,类似于web中的html. 2.         开发的模式不一样,winform是mvp事件驱动,比如你得单机刷新按钮,界面的数据才会更新.而wpf是mvvm数据驱动,一旦后台的数据发生了改变,前台界面会自己更新.(初学者不用太纠结这个,先学会怎么用吧.) 两者的优缺点是:winform简单,开发快捷,只需要

WPF学习之路(十)实例:用户注册

通过一个注册用户的实例了解页面间数据的传递 首先构建一个User类  User.cs public class User { private string name; public string Name { get { return this.name; } set { this.name = value; } } private string password; public string Password { get { return this.password; } set { this

WPF学习之路(二) XAML(续)

属性 简单属性 前面用到的Width/Height都是简单属性,其赋值一定要放到双引号里 XAML解析器会根据属性的类型执行隐式转换 与C#的区别 SolidBrush.Color = Colors.AliceBlue; <Button Color = "AliceBlue" /> C#中有的枚举类型可以用(|)运算符组合,在XAML中用(,)分隔 附加属性 附加属性可以用于多个控件,但是在另外一个类中定义的属性,在WPF中常常用于布局 如DockPanel.Dock=&q

WPF学习之路(六)Command

在WPF中,命令绑定机制是相比于事件更高级的概念,把应用程序的功能划分为多个任务,任务由多种途径触发. 应用Command Binding使代码更符合MVVM模式(Model-View-ViewModel),类似于MVC模式(Model-View-Control).这两种模式在以后的BLOG中会有详细的介绍.目的都是为了更好的分离前后台逻辑. 一个简单的Button <Button Content="Button" Click="Button_Click" /

WPF学习之路(三) 属性与依赖

类型是DependencyProperty的属性是依赖属性 依赖属性不同于普通的.Net属性,类似于一个计算过程,根据依赖的值得到最终值. 为什么引入依赖属性: MSDN原文 One of the primary architectural philosophies used in building WPF was a preference for properties over methods or events. WPF的设计思想是侧重属性胜于方法和事件. 实例 依赖属性对资源引用的支持 设

WPF学习之路(七)应用程序和窗口(续)

窗口的生命周期 WPF中一个Window类代表一个窗口 一个的窗口的生命周期也有好几个阶段: 1.构造器被调用 2.Window.Initialized事件被触发 3.Window.Activated事件被触发 4.Window.Loaded事件被触发 5.Window.ContentRendered事件被触发 6.用户和窗口进行交互(Actived与Deactived状态互相切换) 7.Window.Closing事件被触发 8.Window.Uloaded事件被触发 9.Window.Clo

WPF学习之路(四)路由

路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供支持并由 Windows Presentation Foundation (WPF) 事件系统来处理. 实例: Xaml <Border Height="50" Width="300" BorderBrush="Gray" BorderThic