博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows 8 开发之设置合约
阅读量:6195 次
发布时间:2019-06-21

本文共 4033 字,大约阅读时间需要 13 分钟。

   合约:合约就像一个或多个程序之间的协议。合约定义了应用程序在与其它程序或Windows 进行交互时必须遵循的一些约定。我们对一个应用的一些设置,常用的可以放到AppBar上面,如果不是很常用的,比如应用程序的主题颜色,可以放到设置合约,也就是通过超级菜单调出来的设置面板上。下面就介绍如何把我们的设置选项添加的设置面板中。

1.引入命名空间:Windows.UI.ApplicationSettings;

2.注册设置事件

  在程序启动的时候,App.xaml.cs文件中有一个名为OnLaunched的方法会被调用。在OnLaunched的开头,我创建了一个event handler,当用户打开SettingsPane时,会被调用。你自定义的设置画面直到用户打开Settings Charm时,才会被加载。当你“暂停”你的程序或者游戏,如果设置面板被打开了,那么这个event也会被调用。

protected override void OnLaunched(LaunchActivatedEventArgs args)        {            SettingsPane.GetForCurrentView().CommandsRequested += App_CommandsRequested;    //注册设置事件            Frame rootFrame = Window.Current.Content as Frame;            // 不要在窗口已包含内容时重复应用程序初始化,            // 只需确保窗口处于活动状态            if (rootFrame == null)            {                // 创建要充当导航上下文的框架,并导航到第一页                rootFrame = new Frame();                if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)                {                    //TODO: 从之前挂起的应用程序加载状态                }                // 将框架放在当前窗口中                Window.Current.Content = rootFrame;            }            if (rootFrame.Content == null)            {                // 当未还原导航堆栈时,导航到第一页,                // 并通过将所需信息作为导航参数传入来配置                // 参数                if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))                {                    throw new Exception("Failed to create initial page");                }            }            // 确保当前窗口处于活动状态            Window.Current.Activate();        }
void App_CommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)        {            SettingsCommand cmd = new SettingsCommand("关于", "关于应用", (handle) =>            {                Popup popup = CreatePopup.Create(new AboutPage(),346);                popup.IsOpen = true;                            });            SettingsCommand cmd1 = new SettingsCommand("主题", "主题颜色", (handle) =>            {                Popup popup = CreatePopup.Create(new ThemColor(), 346);                popup.IsOpen = true;            });            args.Request.ApplicationCommands.Add(cmd);            args.Request.ApplicationCommands.Add(cmd1);        }

  如上代码所示,我创建了一个SettingsCommand对象,并提供了三个值。除非你需要在程序运行时修改SettingsPane,否则第一个参数值并不太重要。它就是一个简单ID,随后可以通过这个ID可以引用到SettingsCommand。标签“主题颜色”可以是任意的字符串,不过我建议不要超过40个字符,否则会被截断。最后一个参数值是这个command的handler。当用户轻触lable 时,会执行该handler。在这里,我用lambada 表达式来简化该处理。表达式里面,我创建了一个Popup控件,并将其IsOpen 属性设置为true。改变这个属性,可以使Popup显示在屏幕上。

3.  创建Popup控件

  首先是一个自定义的UserControl,之后我会介绍到该UserControl,现在只需要明白AboutPage.xaml是一个UserControl即可,AboutPage.xaml是用于Popup控件中的。

public class CreatePopup    {        public static Popup Create(UserControl element, double width)        {            Popup p = new Popup();            p.Child = element;            p.IsLightDismissEnabled = true;            p.ChildTransitions = new TransitionCollection();            p.ChildTransitions.Add(new PaneThemeTransition()    //声明边缘 UI(如应用程序栏)的边缘转换位置。            {                Edge = (SettingsPane.Edge == SettingsEdgeLocation.Right) ?                        EdgeTransitionLocation.Right :                        EdgeTransitionLocation.Left            });//检查SettingsPane的edge,有些国家的超级菜单在左边。            element.Width = width;            element.Height = Window.Current.Bounds.Height;                       p.SetValue(Canvas.LeftProperty, SettingsPane.Edge == SettingsEdgeLocation.Right ? (Window.Current.Bounds.Width - width) : 0);//设置距离左边的边距            p.SetValue(Canvas.TopProperty, 0);            return p;        }    }

   上面定义了UserControl的高度和宽度,并将element赋值给Popup控件p。(这里建议的宽度是346或者646,高度应该是用户屏幕的完整高度,参考:设计指南)。最后,设置了popup的left 和top 属性,这样popup将会出现在适当的位置,然后将p返回给SettingsCommand。 

   注解:Windows 8可以根据机器的本地化设置而有不同的变化。如果有的国家的语言是从右往左读的,那么Charms  Bar的实际位置是在屏幕的左边,而不是右
边。这就是为什么我在给popup的LeftProperty赋值时,检查SettingsPane的“edge”。

4. 创建UserControl

  添加一个新的UserControl项到工程中。为了跟之前的代码想匹配,我将其命名为AboutPage.xaml。这个文件中代码的内容完全取决于你。没有任何的官方文档约束。在UserControl中,可以通过在MainPage中定义一个共有字段public static MainPage Current来访问MainPage页面中控件,实现对页面里面控件的属性进行修改。

 

 如需源代码,点击下载

转载地址:http://gcuca.baihongyu.com/

你可能感兴趣的文章
MyExcel 2.1.3 发布,提供行级读取处理能力
查看>>
算法与数据结构(七) 图论
查看>>
【趣解编程】条件语句if
查看>>
95后博士入职达摩院,14岁上大学,成阿里史上最年轻科学家
查看>>
JPress v2.0-rc.4 发布,修复插件安装卸载的若干问题
查看>>
区块链技术开发 谈谈区块链应用的几大优势
查看>>
C# 设置Excel打印选项及打印excel文档
查看>>
systemd-journald日志持久化的操作方法
查看>>
Linux设备模型 (1)
查看>>
webshell木马简介及防护
查看>>
4.1-4.4 python的数据类型
查看>>
数据库副本的自动种子设定(自增长)
查看>>
Hadoop深入浅出,Hadoop的部署
查看>>
算法学习之路|欧拉回路初见
查看>>
VSFTP服务器学习笔记
查看>>
自己动手做聊天机器人 一-涉及知识【转】
查看>>
常用的一些javascript小技巧
查看>>
【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】下 ~ Net程序员的福利...
查看>>
【转】找了好久,IOS实现半翻页功能
查看>>
Mysql性能优化一
查看>>