设为首页 收藏本站
查看: 392|回复: 0

[经验分享] 背水一战 Windows 10 (41)

[复制链接]

尚未签到

发表于 2017-6-28 11:47:11 | 显示全部楼层 |阅读模式
  [源码下载]




背水一战 Windows 10 (41) - 控件(导航类): Frame  
作者:webabcd

介绍
背水一战 Windows 10 之 控件(导航类)


  • Frame
  
示例
Controls/NavigationControl/FrameDemo.xaml



<Page
x:Class="Windows10.Controls.NavigationControl.FrameDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Controls.NavigationControl"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Margin="10 0 10 10" Orientation="Horizontal">
<StackPanel Width="400">
<Button Name="btnGotoFrame1" Content="导航至 Frame1" Click="btnGotoFrame1_Click" />
<Button Name="btnGotoFrame2" Content="导航至 Frame2" Click="btnGotoFrame2_Click" Margin="0 10 0 0" />
<Button Name="btnBack" Content="后退" Click="btnBack_Click" Margin="0 10 0 0" />
<Button Name="btnForward" Content="前进" Click="btnForward_Click" Margin="0 10 0 0" />
<TextBlock Name="lblMsg" TextWrapping="Wrap" Margin="0 10 0 0" />
</StackPanel>
<Frame Name="frame" VerticalAlignment="Top" Margin="10 0 0 0"  />
</StackPanel>
</Grid>
</Page>
  Controls/NavigationControl/FrameDemo.xaml.cs



/*
* Frame - 框架控件,用于导航内容(继承自 ContentControl, 请参见 /Controls/BaseControl/ContentControlDemo/)
*     BackStackDepth - 返回 stack 中的条目数
*     BackStack - 返回向后导航历史记录的 PageStackEntry 实例的集合(可以根据需求对集合增删改查)
*     ForwardStack - 返回向前导航历史记录的 PageStackEntry 实例的集合(可以根据需求对集合增删改查)
*     CanGoBack - 可否可以向后导航
*     CanGoForward - 可否可以向前导航
*     GoBack() - 向后导航,可以指定过渡效果
*     GoForward() - 向前导航
*     Navigate() - 导航到指定的 Type,可以传递一个 object 类型的参数,可以指定过渡效果
*     CurrentSourcePageType - 获取 Frame 当前内容的 Type
*     SourcePageType - 获取或设置 Frame 当前内容的 Type
*
*     CacheSize - 所支持的最大缓存页数,默认值 10
*         CacheSize 与被导航的页的 Page.NavigationCacheMode 属性相关(详见 Frame1.xaml.cs 和 Frame2.xaml.cs 的示例代码)
*             NavigationCacheMode.Disabled - 每次导航到页时,都重新实例化此页,默认值(CacheSize 无效)
*             NavigationCacheMode.Enabled - 每次导航到页时,首先缓存此页,此时如果已缓存的页数大于 CacheSize,则按先进先出的原则丢弃最早的缓存页(CacheSize 有效)
*             NavigationCacheMode.Required - 每次导航到页时,都缓存此页(CacheSize 无效)
*
*     Navigating - 导航开始时触发的事件
*     Navigated - 导航完成后触发的事件
*     NavigationFailed - 导航失败时触发的事件
*     NavigationStopped - 导航过程中,又请求了一个新的导航时触发的事件
*     
*     GetNavigationState() - 获取 Frame 当前的导航状态,返回字符串类型的数据,仅当导航无参数传递或只传递简单参数(int, char, string, guid, bool 等)时有效
*     SetNavigationState(string navigationState) - 将 Frame 还原到指定的导航状态
*     
*     
* PageStackEntry - 保存在 stack 中的页对象
*      SourcePageType - 获取此页的类型
*      Parameter - 获取之前导航至此页时的参数
*
*
* NavigationEventArgs - 导航的事件参数
*     NavigationMode - 导航方式,只读(Windows.UI.Xaml.Navigation.NavigationMode 枚举)
*         New, Back, Forward, Refresh
*     Parameter - 传递给导航目标页的参数,只读
*     SourcePageType - 导航的目标页的类型,只读
*     
*     
* 注:
* 1、关于导航过程中的过渡效果请参见 /Animation/ThemeTransition/NavigationTransitionInfo/ 中的内容
* 2、Frame 中与过渡效果有关的是 GoBack() 和 Navigate() 中的 NavigationTransitionInfo 类型的参数
*/
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace Windows10.Controls.NavigationControl
{
public sealed partial class FrameDemo : Page
{
public FrameDemo()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
frame.Navigated += frame_Navigated;
}
void frame_Navigated(object sender, NavigationEventArgs e)
{
lblMsg.Text = "CacheSize: " + frame.CacheSize;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "BackStackDepth: " + frame.BackStackDepth;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "CanGoBack: " + frame.CanGoBack;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "CanGoForward: " + frame.CanGoForward;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "CurrentSourcePageType: " + frame.CurrentSourcePageType;
lblMsg.Text += Environment.NewLine;
// 显示 frame 的当前的导航状态,记录此值后,可以在需要的时候通过 SetNavigationState() 将 frame 还原到指定的导航状态
lblMsg.Text += "NavigationState: " + frame.GetNavigationState();
}
private void btnGotoFrame1_Click(object sender, RoutedEventArgs e)
{
frame.Navigate(typeof(Frame1), "param1");
}
private void btnGotoFrame2_Click(object sender, RoutedEventArgs e)
{
frame.SourcePageType = typeof(Frame2);
}
private void btnBack_Click(object sender, RoutedEventArgs e)
{
if (frame.CanGoBack)
frame.GoBack();
}
private void btnForward_Click(object sender, RoutedEventArgs e)
{
if (frame.CanGoForward)
frame.GoForward();
}
}
}
  
Controls/NavigationControl/Frame1.xaml



<Page
x:Class="Windows10.Controls.NavigationControl.Frame1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Controls.NavigationControl"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Margin="10 0 10 10">
<TextBlock Name="lblMsg" Margin="5" TextWrapping="Wrap" />
</StackPanel>
</Grid>
</Page>
  Controls/NavigationControl/Frame1.xaml.cs



using System;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace Windows10.Controls.NavigationControl
{
public sealed partial class Frame1 : Page
{
public Frame1()
{
this.InitializeComponent();
/*
* Page.NavigationCacheMode - 使用 Frame 导航到此页面时,页面的缓存模式
*     Disabled - 每次导航到页时,都重新实例化此页,默认值(Frame.CacheSize 无效)
*     Enabled - 每次导航到页时,首先缓存此页,此时如果已缓存的页数大于 Frame.CacheSize,则按先进先出的原则丢弃最早的缓存页(Frame.CacheSize 有效)
*     Required - 每次导航到页时,都缓存此页(Frame.CacheSize 无效)
*/
this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
this.Loaded += Frame1_Loaded;
}
void Frame1_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "Loaded: " + DateTime.Now.ToString();
}
// 来了
protected override void OnNavigatedTo(NavigationEventArgs e)
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "OnNavigatedTo: " + DateTime.Now.ToString();
lblMsg.Text += " param: " + (string)e.Parameter;
}
// 准备走了,但是可以取消
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "OnNavigatingFrom(NavigatingCancelEventArgs): " + DateTime.Now.ToString();
lblMsg.Text += " param: " + (string)e.Parameter;
}
// 已经走了
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "OnNavigatedFrom(NavigationEventArgs): " + DateTime.Now.ToString();
lblMsg.Text += " param: " + (string)e.Parameter;
}
}
}
  
Controls/NavigationControl/Frame2.xaml



<Page
x:Class="Windows10.Controls.NavigationControl.Frame2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Controls.NavigationControl"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Margin="10 0 10 10">
<TextBlock Name="lblMsg" Margin="5" TextWrapping="Wrap" />
</StackPanel>
</Grid>
</Page>
  Controls/NavigationControl/Frame2.xaml.cs



using System;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace Windows10.Controls.NavigationControl
{
public sealed partial class Frame2 : Page
{
public Frame2()
{
this.InitializeComponent();
/*
* Page.NavigationCacheMode - 使用 Frame 导航到此页面时,页面的缓存模式
*     Disabled - 每次导航到页时,都重新实例化此页,默认值(Frame.CacheSize 无效)
*     Enabled - 每次导航到页时,首先缓存此页,此时如果已缓存的页数大于 Frame.CacheSize,则按先进先出的原则丢弃最早的缓存页(Frame.CacheSize 有效)
*     Required - 每次导航到页时,都缓存此页(Frame.CacheSize 无效)
*/
this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
this.Loaded += Frame2_Loaded;
}
void Frame2_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "Loaded: " + DateTime.Now.ToString();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "OnNavigatedTo: " + DateTime.Now.ToString();
}
}
}
  
OK
[源码下载]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-388947-1-1.html 上篇帖子: Linux下搭建Windows KMS服务器 下篇帖子: 【Windows 10 应用开发】输入模拟
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表