|
| |
精品推荐 |
 |
|
| |
|
|
|
|
用WPF构建强大的用户体验
|
日期:2007年8月16日 作者: 查看:[大字体
中字体 小字体]
|
pack://siteoforigin:,,,/HomePage.xaml 你可以导航到页面(无论是嵌入的还是松散的)的任何一个片段(fragment)。这与Web样式的片段导航是类似的。通过指定Name属性,你就可以在页面上定义片段了,如下所示:
<Page ... > <TextBlock Name="Paragraph1" TextWrapping="Wrap"> ... </TextBlock> </Page> 为了导航到页面片段,你需要使用另外一种特殊的Pack URI,在页面URI上附加"#XAMLElementName",如下所示:
HelpPage3.xaml#Paragraph3 页面函数(PageFunction)
由于内容来自于多个位置,而超链接驱动的应用程序又允许用户导航到任何位置,从而使完成一项事务变得非常困难。这是因为超链接驱动的应用程序不能轻易地约束用户导航到特定页面。无论应用程序提供了多少个超链接,用户仍然可以使用浏览器的地址栏导航到任何地方。其结果是,用户可以离开发起事务的页面,而不考虑事务是否完成了。在Web世界中,有很多技巧可用于建立类似对话框样式行为、依赖对话状态等的Web页面。不幸的是,这需要大量的开销。对话框的确可以解决这个问题,但是由于安全性原因,Window不能从应用程序中实例化,例如XBAP的对话框就只能在Internet区域部分信任环境中运行。
幸运的是,Windows Presentation Foundation通过页面函数支持模式对话框样式的机制。它们被封装为泛化的PageFunction类型,直接衍生自Page。因而PageFunction的样子与页面类似,它的建立方式也相似,如下段所示。
代码:PageFunction
<!--OrderABoxPageFunction.xaml (markup) --> <PageFunction xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:BoxApplicationXBAP" x:Class="BoxApplicationXBAP.OrderABoxPageFunction" x:TypeArguments="local:Order" WindowTitle="Box Application - Order a Box" > ... <!--Content--> ... <PageFunction>
// OrderABoxPageFunction.cs (code-behind) public partial class OrderABoxPageFunction: PageFunction<Order> { ... } 这个特定的页面函数的目标是收集新订单的信息,它被Order封装了。由于典型情况下事务都是这样操作数据的,PageFunction是一个泛型(generic),并被声明用于操作特定的数据(标记中特定的x:TypeArguments属性)。如果x:TypeArguments的值和泛化的PageFunction类型的参数不匹配,就会出现编译错误。
调用PageFunction的页面需要实例化PageFunction并手动导航到该页面上:
// HomePage.cs (codebehind) public partial class HomePage : Page { void orderHyperlink_Click(object sender, RoutedEventArgs e) { OrderABoxPageFunction pageFunction = new OrderABoxPageFunction(); pageFunction.Return += new ReturnEventHandler<Order>(OrderABoxPageFunction_Returned); this.NavigationService.Navigate(pageFunction); } ... } 接下来,PageFunction在给调用页面返回结果之前,必须允许用户完成页面:
// OrderABoxPageFunction.cs (codebehind) public partial class OrderABoxPageFunction: PageFunction<Order> { void orderHyperlink_Click(object sender, RoutedEventArgs e) { // 返回订单 this.OnReturn(new ReturnEventArgs<Order>(this.order)); } void cancelHyperlink_Click(object sender, RoutedEventArgs e) { // 取消订单 this.OnReturn(null); } ... } 接下来调用PageFunction.OnReturn返回,传递一个泛化的ReturnEventArgs实例。如果事务被接受了,它就包含一个PageFunction所操作的类型实例。否则,它就是空的。为了检测PageFunction的返回,并获取ReturnEventArgs和其数据,调用页面需要处理PageFunction.Returned事件,如下段代码所示。被返回的数据存放在Returned事件处理程序的ReturnEventArgs参数的Result属性中。
上一篇:XAML开发入门之XAML的五大元素
下一篇:XAML开发入门之附加属性和绑定属性
|
| 用WPF构建强大的用户体验 相关文章: |
|
|
|
| 用WPF构建强大的用户体验 相关软件: |
|
|
|
|