WPF学习笔记3. Navigation
2010-10-11 16:02:19 来源:WEB开发网6. Frame
Frame 的作用和 HTML 中的 IFrame 类似,我们可以用它在一个普通的 Window 或 Page 中嵌套显示其他的 Page。
<Window x:Class="Learn.WPF.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"> <Grid> <Frame Source="Page1.xaml"></Frame> </Grid> </Window>
默认情况下,Frame 会尝试使用上层页面(Page)或窗体(NavigationWindow)的日志,当然我们也可以使用 JournalOwnership 属性强行让 Frame 使用自己的日志导航。
<Frame Source="Page1.xaml" JournalOwnership="OwnsJournal"></Frame>
Frame 的另外一个作用就是可以导航到 HTML 页面,我们可以把它当作一个嵌入式 IE WebBrowser 来使用。
<Frame Source="http://www.rainsts.net" />
7. PageFunction<T>
WPF 提供了一个称之为 PageFunction 的 Page 继承类来实现类似 HTML showModal 的功能。我们可以用它来收集某些数据并返回给调用页,当然这个封装其实非常简单,我们完全可以自己实现,无非是提供一个类似 OnReturn 的方法实现而已。泛型参数 T 表示返回数据类型。
Page1.xaml.cs
public partial class Page1 : Page { private void Hyperlink_Click(object sender, RoutedEventArgs e) { var modal = new PageFunction1(); modal.Return += (s, ex) => this.label1.Content = ex.Result.ToString(); this.NavigationService.Navigate(modal); } } PageFunction1.xaml.cspublic partial class PageFunction1 : PageFunction<int> { private void button1_Click(object sender, RoutedEventArgs e) { OnReturn(new ReturnEventArgs<int>(DateTime.Now.Millisecond)); } }
使用步骤:
(1) 创建 PageFunction<T> 对象实例,当然我们可以使用含参构造传递额外的数据;
(2) 调用 PageFunction<T>.OnReturn() 方法用来返回一个特定的结果包装对象 —— ReturnEventArgs<T>;
(3) 调用者通过订阅 PageFunction<T>.Return 事件获取这个返回结果。
MSDN 中还提到用 OnReturn(null) 来表示 Cancel, ~~~~ 说实话,个人觉得这个 PageFunction 从命名到执行逻辑都有点别扭,难道仅仅是因为 Page 特殊的实例构造逻辑?我们也可以使用 Application.Properties + Page 来实现一个非关联耦合的 showModel 逻辑,只不过不那么 "标准" 罢了。
有一点需要提醒一下:我们应该及时解除对 FunctionPage<T>.Return 的订阅,我上面的例子和 MSDN 一样偷懒了。
更多精彩
赞助商链接