Windows 8 开发之设置合约的介绍

合约:合约就像一个或多个程序之间的协议。合约定义了应用程序在与其它程序或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;</p><p> // 不要在窗口已包含内容时重复应用程序初始化,
// 只需确保窗口处于活动状态
if (rootFrame == null)
{
// 创建要充当导航上下文的框架,并导航到第一页
rootFrame = new Frame();</p><p> if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: 从之前挂起的应用程序加载状态
}</p><p> // 将框架放在当前窗口中
Window.Current.Content = rootFrame;
}</p><p> 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,有些国家的超级菜单在左边。</p><p> 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页面中控件,实现对页面里面控件的属性进行修改。

如需源代码,点击SettingPanel_jb51net.zip下载

(0)

相关推荐

  • Windows 10分屏设置方法介绍

    设置win10分屏在一定程度上可以帮助我们大大提供工作效率,其实早在win8操作系统中,设置分屏功能已存在,只是很多人不知道而已,那么,在新操作系统win10中,如何设置分屏功能将屏幕四等分呢,下面看 ...

  • Windows 8技巧:Windows 8开发知识储备[实用篇]

    在本文中将整理出一些Windows 8开发前需要了解的一些基础知识并且列为相应的几个表格以供大家参考,如有误之处请指正,谢谢。 一、新建常用XAML项目类型模板和各种语言的关系 项目类型名 项目类型作 ...

  • windows gtk+开发环境搭建方法详解(图解)

    GTK+开发环境搭建 “工欲善其事,必先利其器”首先介绍一下GTK+开发环境的搭建,网上很多所谓的GTK的开发环境的搭建基本都是抄来抄去,也不知道有没有人使用他们介绍的方法搭建并编译成功,很不幸的是我 ...

  • 基于windows的源地址路由设置的3种方法

    一般的路由设置方式为目的路由,即对目的IP做匹配,若满足一定的规则,则把数据从某个网口发出去(同时也决定了目的MAC地址)。源地址路由,顾名思义,对源地址IP做匹配,若满足一定的规则,则把数据从某个网 ...

  • Windows 7自动备份设置图解

    Windows 7自动备份又叫计划备份,之前写过一篇Windows 7备份和还原设置及使用要点,限于篇幅备份和还原功能都没介绍完整,昨晚看了一下,感觉还是有些问题,所以就把原来的文章给劈成两篇,分别独 ...

  • windows xp系统怎样设置开机密码?

      windows xp系统怎样设置开机密码? 其实不管是windows xp还是windows 7系统设置开机密码都是相当简单的一件事情,原理与步骤都几乎一样,下面将分别进行详细介绍. 一.在电脑桌 ...

  • 什么是域和域控制器 Windows 2003域控制器设置/客户端安装及问题处理

    第一部分:介绍活动目录基本概念 1.什么是活动目录 活动目录是一种目录服务,目录服务包括三方面的功能:组织网络中的资源,提供对资源的管理,对资源的 控制,活动目录的服务通过将对网络中的各种资源的信息, ...

  • Word中如何使用控件?word开发工具控件使用介绍

    Word提供了对控制的友好支持,只需要简单几步即可创建自己所需要的用户交互式界面.下面就来看一下具体的设计方法. 步骤 1.打开Word2007,点击“开发工具”选项卡中的“AcitveX控件”中的“ ...

  • 一招教你为Windows 7共享文件夹设置Everyone权限

    相信很多小伙伴都有在使用Windows7系统,如果我们想要对其中的共享文件夹设置Everyone权限该怎么做呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 首先,打开桌面左下角的开始菜单,在弹 ...