[源码下载]

重新想象 Windows 8.1 Store Apps (79) - 控件增强: MediaElement, Frame

作者:webabcd

介绍
重新想象 Windows 8.1 Store Apps 之控件增强

  • MediaElement - 播放视频或音频的控件
  • Frame - 框架控件,用于导航内容

示例
1、演示 MediaElement 的新特性
MediaElementDemo.xaml

  1. <Page
  2. x:Class="Windows81.Controls.MediaElementDemo"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:local="using:Windows81.Controls"
  6. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  7. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  8. mc:Ignorable="d">
  9.  
  10. <Grid Background="Transparent">
  11. <StackPanel Margin="120 0 0 0">
  12.  
  13. <!--
  14. MediaElement - 播放视频或音频的控件
  15. AreTransportControlsEnabled - 是否显示默认控制条
  16. IsFullWindow - 是否全屏显示播放器
  17. -->
  18.  
  19. <MediaElement Name="mediaElement" Source="http://media.w3.org/2010/05/sintel/trailer.mp4" Width="400" Height="300" HorizontalAlignment="Left"
  20. AreTransportControlsEnabled="True" />
  21.  
  22. <Button Name="btnFullScreen" Content="全屏播放" Click="btnFullScreen_Click" Margin="0 10 0 0" />
  23.  
  24. </StackPanel>
  25. </Grid>
  26. </Page>

MediaElementDemo.xaml.cs

  1. /*
  2. * MediaElement - 播放视频或音频的控件
  3. * AreTransportControlsEnabled - 是否显示默认控制条(win8.1 新增)
  4. * IsFullWindow - 是否全屏显示播放器(win8.1 新增)
  5. *
  6. *
  7. * 关于 MediaElement 的基础请参见:http://www.cnblogs.com/webabcd/archive/2013/01/24/2874156.html
  8. *
  9. *
  10. * 注:在 win8.1 中已经引入 MediaStreamSource 了
  11. */
  12.  
  13. using Windows.UI.Xaml;
  14. using Windows.UI.Xaml.Controls;
  15.  
  16. namespace Windows81.Controls
  17. {
  18. public sealed partial class MediaElementDemo : Page
  19. {
  20. public MediaElementDemo()
  21. {
  22. this.InitializeComponent();
  23. }
  24.  
  25. private void btnFullScreen_Click(object sender, RoutedEventArgs e)
  26. {
  27. mediaElement.IsFullWindow = true;
  28. }
  29. }
  30. }

2、完整说明 win8 frame 的功能,并介绍 win8.1 frame 中的新增功能
Frame/Demo.xaml

  1. <Page
  2. x:Class="Windows81.Controls.Frame.Demo"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:local="using:Windows81.Controls.Frame"
  6. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  7. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  8. mc:Ignorable="d">
  9.  
  10. <Grid Background="Transparent">
  11. <StackPanel Margin="120 0 0 0" Orientation="Horizontal">
  12.  
  13. <StackPanel Width="400">
  14. <Button Name="btnGotoFrame1" Content="导航至 Frame1" Click="btnGotoFrame1_Click_1" />
  15.  
  16. <Button Name="btnGotoFrame2" Content="导航至 Frame2" Click="btnGotoFrame2_Click_1" Margin="0 10 0 0" />
  17.  
  18. <Button Name="btnBack" Content="后退" Click="btnBack_Click_1" Margin="0 10 0 0" />
  19.  
  20. <Button Name="btnForward" Content="前进" Click="btnForward_Click_1" Margin="0 10 0 0" />
  21.  
  22. <TextBlock Name="lblMsg" FontSize="14.667" TextWrapping="Wrap" Margin="0 10 0 0" />
  23. </StackPanel>
  24.  
  25. <Frame Name="frame" VerticalAlignment="Top" Margin="10 0 0 0" />
  26.  
  27. </StackPanel>
  28. </Grid>
  29. </Page>

Frame/Demo.xaml.cs

  1. /*
  2. * 本例会完整说明 win8 frame 的功能,并介绍 win8.1 frame 中的新增功能
  3. *
  4. *
  5. * Frame - 框架控件,用于导航内容
  6. * BackStackDepth - 返回 stack 中的条目数
  7. * BackStack - 返回 stack 集合,一个 PageStackEntry 集合,可以添加或删除返回 stack 集合中的元素(win8.1 新增)
  8. * ForwardStack - 前进 stack 集合,一个 PageStackEntry 集合,可以添加或删除前进 stack 集合中的元素(win8.1 新增)
  9. * CanGoBack - 可否向后导航
  10. * CanGoForward - 可否向前导航
  11. * GoBack() - 向后导航
  12. * GoForward() - 向前导航
  13. * Navigate() - 导航到指定的 Type,可以传递一个 object 类型的参数
  14. * SourcePageType - 获取或设置 Frame 当前内容的 Type
  15. *
  16. * CacheSize - 所支持的最大缓存页数,默认值 10
  17. * CacheSize 与被导航的页的 Page.NavigationCacheMode 属性相关(详见 Frame1.xaml.cs 和 Frame2.xaml.cs 的示例代码)
  18. * NavigationCacheMode.Disabled - 每次导航到页时,都重新实例化此页,默认值(CacheSize 无效)
  19. * NavigationCacheMode.Enabled - 每次导航到页时,首先缓存此页,此时如果已缓存的页数大于 CacheSize,则按先进先出的原则丢弃最早的缓存页(CacheSize 有效)
  20. * NavigationCacheMode.Required - 每次导航到页时,都缓存此页(CacheSize 无效)
  21. *
  22. * Navigating - 导航开始时触发的事件
  23. * Navigated - 导航完成后触发的事件
  24. * NavigationFailed - 导航失败时触发的事件
  25. * NavigationStopped - 导航过程中,又请求了一个新的导航时触发的事件
  26. *
  27. * GetNavigationState() - 获取 Frame 当前的导航状态,返回字符串类型的数据,仅当导航无参数传递或只传递简单参数(int, char, string, guid, bool 等)时有效
  28. * SetNavigationState(string navigationState) - 将 Frame 还原到指定的导航状态
  29. *
  30. *
  31. *
  32. * NavigationEventArgs - 导航的事件参数
  33. * NavigationMode - 导航方式,只读(Windows.UI.Xaml.Navigation.NavigationMode 枚举)
  34. * New, Back, Forward, Refresh
  35. * Parameter - 传递给导航目标页的参数,只读
  36. * SourcePageType - 导航的目标页的类型,只读
  37. */
  38.  
  39. using System;
  40. using Windows.UI.Xaml;
  41. using Windows.UI.Xaml.Controls;
  42. using Windows.UI.Xaml.Navigation;
  43.  
  44. namespace Windows81.Controls.Frame
  45. {
  46. public sealed partial class Demo : Page
  47. {
  48. public Demo()
  49. {
  50. this.InitializeComponent();
  51. }
  52.  
  53. protected override void OnNavigatedTo(NavigationEventArgs e)
  54. {
  55. frame.Navigated += frame_Navigated;
  56. }
  57.  
  58. void frame_Navigated(object sender, NavigationEventArgs e)
  59. {
  60. lblMsg.Text = "CacheSize: " + frame.CacheSize;
  61. lblMsg.Text += Environment.NewLine;
  62. lblMsg.Text += "BackStackDepth: " + frame.BackStackDepth;
  63. lblMsg.Text += Environment.NewLine;
  64. lblMsg.Text += "CanGoBack: " + frame.CanGoBack;
  65. lblMsg.Text += Environment.NewLine;
  66. lblMsg.Text += "CanGoForward: " + frame.CanGoForward;
  67. lblMsg.Text += Environment.NewLine;
  68. lblMsg.Text += "CurrentSourcePageType: " + frame.CurrentSourcePageType;
  69. lblMsg.Text += Environment.NewLine;
  70.  
  71. // 显示 frame 的当前的导航状态,记录此值后,可以在需要的时候通过 SetNavigationState() 将 frame 还原到指定的导航状态
  72. lblMsg.Text += "NavigationState: " + frame.GetNavigationState();
  73. }
  74.  
  75. private void btnGotoFrame1_Click_1(object sender, RoutedEventArgs e)
  76. {
  77. frame.Navigate(typeof(Frame1), "param1");
  78. }
  79.  
  80. private void btnGotoFrame2_Click_1(object sender, RoutedEventArgs e)
  81. {
  82. frame.SourcePageType = typeof(Frame2);
  83. }
  84.  
  85. private void btnBack_Click_1(object sender, RoutedEventArgs e)
  86. {
  87. if (frame.CanGoBack)
  88. frame.GoBack();
  89. }
  90.  
  91. private void btnForward_Click_1(object sender, RoutedEventArgs e)
  92. {
  93. if (frame.CanGoForward)
  94. frame.GoForward();
  95. }
  96. }
  97. }

Frame/Frame1.xaml.cs

  1. using System;
  2. using Windows.UI.Xaml.Controls;
  3. using Windows.UI.Xaml.Navigation;
  4.  
  5. namespace Windows81.Controls.Frame
  6. {
  7. public sealed partial class Frame1 : Page
  8. {
  9. public Frame1()
  10. {
  11. this.InitializeComponent();
  12.  
  13. /*
  14. * Page.NavigationCacheMode - 使用 Frame 导航到此页面时,页面的缓存模式
  15. * Disabled - 每次导航到页时,都重新实例化此页,默认值(Frame.CacheSize 无效)
  16. * Enabled - 每次导航到页时,首先缓存此页,此时如果已缓存的页数大于 Frame.CacheSize,则按先进先出的原则丢弃最早的缓存页(Frame.CacheSize 有效)
  17. * Required - 每次导航到页时,都缓存此页(Frame.CacheSize 无效)
  18. */
  19. this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
  20.  
  21. this.Loaded += Frame1_Loaded;
  22. }
  23.  
  24. void Frame1_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
  25. {
  26. lblMsg.Text += Environment.NewLine;
  27. lblMsg.Text += "Loaded: " + DateTime.Now.ToString();
  28. }
  29.  
  30. // 来了
  31. protected override void OnNavigatedTo(NavigationEventArgs e)
  32. {
  33. lblMsg.Text += Environment.NewLine;
  34. lblMsg.Text += "OnNavigatedTo: " + DateTime.Now.ToString();
  35. lblMsg.Text += " param: " + (string)e.Parameter;
  36. }
  37.  
  38. // 准备走了,但是可以取消
  39. protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
  40. {
  41. // NavigatingCancelEventArgs.Parameter - 是 win8.1 新增的
  42.  
  43. lblMsg.Text += Environment.NewLine;
  44. lblMsg.Text += "OnNavigatingFrom(NavigatingCancelEventArgs): " + DateTime.Now.ToString();
  45. lblMsg.Text += " param: " + (string)e.Parameter;
  46. }
  47.  
  48. // 已经走了
  49. protected override void OnNavigatedFrom(NavigationEventArgs e)
  50. {
  51. lblMsg.Text += Environment.NewLine;
  52. lblMsg.Text += "OnNavigatedFrom(NavigationEventArgs): " + DateTime.Now.ToString();
  53. lblMsg.Text += " param: " + (string)e.Parameter;
  54. }
  55. }
  56. }

Frame/Frame2.xaml.cs

  1. using System;
  2. using Windows.UI.Xaml.Controls;
  3. using Windows.UI.Xaml.Navigation;
  4.  
  5. namespace Windows81.Controls.Frame
  6. {
  7. public sealed partial class Frame2 : Page
  8. {
  9. public Frame2()
  10. {
  11. this.InitializeComponent();
  12.  
  13. /*
  14. * Page.NavigationCacheMode - 使用 Frame 导航到此页面时,页面的缓存模式
  15. * Disabled - 每次导航到页时,都重新实例化此页,默认值(Frame.CacheSize 无效)
  16. * Enabled - 每次导航到页时,首先缓存此页,此时如果已缓存的页数大于 Frame.CacheSize,则按先进先出的原则丢弃最早的缓存页(Frame.CacheSize 有效)
  17. * Required - 每次导航到页时,都缓存此页(Frame.CacheSize 无效)
  18. */
  19. this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
  20.  
  21. this.Loaded += Frame2_Loaded;
  22. }
  23.  
  24. void Frame2_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
  25. {
  26. lblMsg.Text += Environment.NewLine;
  27. lblMsg.Text += "Loaded: " + DateTime.Now.ToString();
  28. }
  29.  
  30. protected override void OnNavigatedTo(NavigationEventArgs e)
  31. {
  32. lblMsg.Text += Environment.NewLine;
  33. lblMsg.Text += "OnNavigatedTo: " + DateTime.Now.ToString();
  34. }
  35. }
  36. }

OK
[源码下载]

重新想象 Windows 8.1 Store Apps (79) - 控件增强: MediaElement, Frame的更多相关文章

  1. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    [源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...

  2. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  3. 重新想象 Windows 8.1 Store Apps (78) - 控件增强: ScrollViewer, FlipView, Popup

    [源码下载] 重新想象 Windows 8.1 Store Apps (78) - 控件增强: ScrollViewer, FlipView, Popup 作者:webabcd 介绍重新想象 Wind ...

  4. 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互

    [源码下载] 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互 作者:webabcd 介 ...

  5. 重新想象 Windows 8.1 Store Apps (93) - 控件增强: GridView, ListView

    [源码下载] 重新想象 Windows 8.1 Store Apps (93) - 控件增强: GridView, ListView 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...

  6. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: 加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    原文:重新想象 Windows 8.1 Store Apps (81) - 控件增强: 加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 Web ...

  7. 重新想象 Windows 8.1 Store Apps 系列文章索引

    [源码下载] [重新想象 Windows 8 Store Apps 系列文章] 重新想象 Windows 8.1 Store Apps 系列文章索引 作者:webabcd 1.重新想象 Windows ...

  8. 重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar

    [源码下载] 重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...

  9. 重新想象 Windows 8.1 Store Apps (73) - 新增控件: DatePicker, TimePicker

    [源码下载] 重新想象 Windows 8.1 Store Apps (73) - 新增控件: DatePicker, TimePicker 作者:webabcd 介绍重新想象 Windows 8.1 ...

随机推荐

  1. 通过js看类似C#中的回掉

    我认为并行有两种形式,第一种是异步,第二种是多线程,目的都是为了实现并行,只不过异步和多线程都是手段而已 第一种异步 异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过 ...

  2. [GraphQL] Write a GraphQL Schema in JavaScript

    Writing out a GraphQL Schema in the common GraphQL Language can work for simple GraphQL Schemas, but ...

  3. Xcode 文档注释方法

    摘自:http://www.cnblogs.com/bomo/p/4815963.html 文档注释,可以在调用时显示注释信息,让调用者更好的理解方法的用途. 注释方法: /// 注释 和 /** 注 ...

  4. js-2

    var myarray= new Array(); var myarray= new Array(8); var myarray= new Array(66,80,60,59,70); var mya ...

  5. 网站CSS选择器性能讨论

    CSS选择符由一些初始化参数组成,这些参数指明了要应用这个CSS规则的页面元素.作为一个网站的前端开发工程师,应该避免编写一些常见的开销很大的CSS选择符模式,尽量编写高效的CSS选择符,从而加快页面 ...

  6. Linux Unix 环境变量设置实例

    背景 从第一次写Hello World我们便开始接触环境变量.这最基础的系统设置是必须要掌握的,尤其在是Linux/Unix系统中.比如,哪天某个Java进程出现问题,我们想分析一下其线程堆栈,却发现 ...

  7. eclipse 编译出错(java.io.ObjectInputStream)的解决办法

    Multiple markers at this line - The type java.io.ObjectInputStream cannot be resolved. It is indirec ...

  8. 在线头像上传(js)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. CentOS下Redis服务器安装配置

    说明: 操作系统:CentOS 1.安装编译工具 yum install wget  make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-de ...

  10. Elasticsearch及java客户端jest使用

    本文使用Github中的Elasticsearch-rtf,已经集成了众多的插件,例如必须使用的中文分词等,可以简单的通过配置来启用中文分词.本文主要分为以下几部分: 1.配置和启用中文分词: 2.定 ...