WEB开发网
开发学院WEB开发ASP.NET WPF学习笔记3. Navigation 阅读

WPF学习笔记3. Navigation

 2010-10-11 16:02:19 来源:WEB开发网   
核心提示:6. FrameFrame 的作用和 HTML 中的 IFrame 类似,我们可以用它在一个普通的 Window 或 Page 中嵌套显示其他的 Page,WPF学习笔记3. Navigation(3),<Window x:Class="Learn.WPF.Window1"xmlns=&quo

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 一样偷懒了。

上一页  1 2 3 

Tags:WPF 学习 笔记

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接