Hyperlink

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

实例:

<Grid>
<FlowDocumentReader>
<FlowDocument>
<Section LineHeight="" FontSize="">
<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="" Background="AliceBlue">
. First paragraph content
</Paragraph>
<Paragraph x:Name="second" FontSize="" Background="AliceBlue">
. 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="" />
<Setter Property="Margin" Value="" />
</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 = });
}
else if (link == link4)
{
NavigationService.Navigate(new Uri("http://www.bing.com"));
}
}

其他导航方式

导航工具栏

导航命令

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

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

历史记录

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

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

To be continue...

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

  1. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  2. WPF学习之路(九)导航和页面(续)

    生命周期 如果Page1成功导航到Page2,首先会触发NavigationService的Navigating事件,标识导航开始.随后创建Page2对象,并且触发NavigationProgress ...

  3. WPF学习之路(八)页面

    传统的应用程序中有两类应用程序模式:桌面应用,Web应用.WPF的导航应用程序模糊了这两类应用程序的界限的第三类应用程序 WPF导航表现为两种形式,一是将导航内容寄宿于窗口,二是XAML浏览器应用程序 ...

  4. WPF学习之路(一) 初识WPF

    参考<葵花宝典-WPF自学手册> VS2012 先创建第一个WPF小程序 1.创建WPF程序 2.查看Solution,WPF中xaml文件和cs文件经常成对出现 两个主要的类:APP(W ...

  5. WPF学习之路一

    前段时间一直在学习MVC,工作需要,现在需要180度急转弯,搞WPF,MVVM,只能找资料学习了. WPF中有一个消息机制,就是当前台控件绑定的值改变时,会自动通知到指定的事件来改变VM的值,反之亦然 ...

  6. WPF学习之路(十四)样式和模板

    样式 实例: <Window.Resources> <Style x:Key="BtnStyle"> <Setter Property=" ...

  7. WPF学习之路(十三)URL

    URL一般由三个部分组成,协议.资源所在主机地址.资源路径 WPF中URL同样有三部分组成:pack.authority(application:| siteoforigin:).路径 资源文件 本地 ...

  8. WPF学习之路(十二)控件(Items控件)

     ListBox 提供了一个选项列表,可以固定或者动态绑定 <StackPanel> <GroupBox Margin="> <GroupBox.Header& ...

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

    通过一个注册用户的实例了解页面间数据的传递 首先构建一个User类  User.cs public class User { private string name; public string Na ...

随机推荐

  1. jQuery漂亮图标的垂直导航菜单

    效果展示 http://hovertree.com/texiao/nav/3/ jQuery漂亮图标的垂直导航菜单 是一款当鼠标滑过菜单项时,会有一个背景遮罩层跟着鼠标移动,效果非常炫酷,图标还是矢量 ...

  2. C#单纯的字母数字ASCII码转换

    字母转换成数字 byte[] array = new byte[1];   //定义一组数组array            array = System.Text.Encoding.ASCII.Ge ...

  3. CPU介绍

    CPU内核主要分为两部分:运算器和控制器. (一) 运算器 cpu基本想到的是计算,因此有算数计算,还有逻辑计算单元以及移位简单的运算:fp运算单独拿出:要运算就需要输入数字,因此有寄存器组,即通用寄 ...

  4. Type mismatch: cannot convert from java.sql.PreparedStatement to com.mysql.jdbc.PreparedStatement

    Connection.prepareStatement()函数出错,提示: Type mismatch: cannot convert from java.sql.PreparedStatement ...

  5. Firemonkey 在 iOS 平台能显示更多的 emoji 字符

    使用 Firmonkey 在显示 emoji 字符时,有些 emoji 并无法显示彩色,见下图: 经查 FMX 源码,是因为判断 emoji 的字符区段不足造成的,经过修改后,便可显示,见下图: 修改 ...

  6. UVA 10089 Repackaging 数学问题

    大致题意:给出几个包裹,每个包裹都包装好了3种大小的杯子.现在要重新包装,使向量 a[1]*(s[1][1],s[1][2],s[1][3])+a[2]*(s[2][1],s[2][2],s[2][3 ...

  7. 【Effective Java】7、优先考虑泛型方法

    package cn.xf.cp.ch02.item27; import java.util.HashSet; import java.util.Set; public class Union { / ...

  8. 瞬间读懂什么是互联网思维、大数据、O2O、众筹、红海

     1.什么叫大数据? 某必胜客店的电话铃响了,客服人员拿起电话. 客服:必胜客.您好,请问有什么需要我为您服务? 顾客:你好,我想要一份…… 客服:先生,烦请先把您的会员卡号告诉我. 顾客:16846 ...

  9. Java经典实例:使用正则表达式:测试模式

    import java.util.regex.Pattern; /** * Created by Frank * 在Java中使用正则表达式:测试模式 */ public class RESimple ...

  10. Ansible用于网络设备管理 part 4 使用NAPALM成品库+Gabriele的方法+循环

    上次用NAPALM实现了一个给端口加description的小功能,但是那次仅仅是用于给一个设备的一个端口加description,没有实现一次给多个设备加,也没有实现一个给多个端口加(虽然这次也没实 ...