日期:2014-05-17  浏览次数:20767 次

新时尚Windows8开发(19):为应用程序定义“设置”面板

我们随便打开一个应用,只要应用的开发者为其应用定义了“设置”的内容,我们就会看到类似下面截图的UI。

 

这说明了什么呢?说明了在Win8中,你的应用程序设置可以集成到系统的侧边栏中。既然可以实现这样的整合,那么SDK中可定提供了相应的API的,对滴,很好找,而且,要用一的东西基本上都在同一个命名空间下。

类不是很多,至少可以说明,一来实现这个功能并不难,二来它们之间的关系也比较好找。

这些类之间是啥关系呢,我大概画了一个示意图。

 

很显然,都是以SettingsPane为核心的。首先,如果要通过代码显示设置面板,就可以调用静态的Show方法。

下面,我们通实例来验证一下。

1、启动可爱的VS,新建一个空白页面项目。

2、打开MainPage.xaml,我们需要一个按钮,当点击按钮时,显示设置面板。

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel Orientation="Vertical">
            <Button Margin="13,27,0,12" Content="显示设置面板" Click="onShowSettings"/>
        </StackPanel>
    </Grid>


代码很简单,你可能会问,为啥要弄个StackPanel?呵呵,先放着,后文我们要对这个布局进行扩展。

3、进入到代码视图,我们还要完成onShowSettings事件处理程序。

        private void onShowSettings(object sender, RoutedEventArgs e)
        {
            // 显示设置面板
            Windows.UI.ApplicationSettings.SettingsPane.Show();
        }

接着,在MainPage类的构造函数中加入以下代码,

        public MainPage()
        {
            this.InitializeComponent();

            // 我们将为设置面板添加三个命令
            // 分别为 首选项,用户反馈,关于
            Windows.UI.ApplicationSettings.SettingsCommand cmd1 = new Windows.UI.ApplicationSettings.SettingsCommand("1", "首选项", c => { });
            Windows.UI.ApplicationSettings.SettingsCommand cmd2 = new Windows.UI.ApplicationSettings.SettingsCommand("2", "用户反馈", c => { });
            Windows.UI.ApplicationSettings.SettingsCommand cmd3 = new Windows.UI.ApplicationSettings.SettingsCommand("3", "关于本应用", c => { });
            // 命令是在CommandsRequested事件中添加的
            Windows.UI.ApplicationSettings.SettingsPane.GetForCurrentView().CommandsRequested += (sp, arg) =>
            {
                arg.Request.ApplicationCommands.Add(cmd1);
                arg.Request.ApplicationCommands.Add(cmd2);
                arg.Request.ApplicationCommands.Add(cmd3);
            };
        }


上面代码中,我们加入了三个命令,命令对象就是SettingsCommand实例,我们调用了它的构造函数。

public SettingsCommand(object settingsCommandId, string label, UICommandInvokedHandler handler);

第一个参数是命令的唯一ID,这个东西要记住是唯一的,就像我们的身份证号码一样,是什么样的唯一法呢?就是在当前应用程序的设置面板中是唯一的;

参数二是一个字符串,就是我们要在命令上显示的文本;第三个参数你能猜到了,当估是回调的委托了,只要我们的命令绑定一个委托,那么当用户选择了哪个命令,我们的程序可以作出相应的反馈。

 

这时候,我们把程序运行一下,运行后,点击那个按钮,你就能看到如下图所示的东西。

 

那么,如果不是代码显示,而是用户自己操作呢?那更简单,直接把那页面中的按钮和onShowSettings方法直接删掉,再运行。

把鼠标移到屏幕的右上角或右下角,出现侧边栏,接着选“设置”,你依然能看到神奇的一幕。

 

 

好的,我们继续,现在,又回到MainPage.xaml,把刚才的XAML改一下。

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel Orientation="Vertical">
            <Rectangle x:Name="rectA" Width="200" Height="80" Fill="Blue" Visibility="Collapsed"/>
            <Rectangle x:Name="rectB" Width="200" Height="80" Fill="Yellow" Visibility="Collapsed"/>
            <Rectangle x:Name="rectC" W