随笔 - 55  文章 - 15  trackbacks - 0
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

     使用App settings 可以使用户定制化自己的应用。App Settings的高度要同设备的高度一致,宽度可以有346和646像素两个值,可以在代码中进行设置。另外App Settings 中的设置要立即反映到应用中去。

     具体的设计手册可以参考:http://msdn.microsoft.com/en-us/library/windows/apps/hh770544.aspx
      还是中文版看起来舒服:http://msdn.microsoft.com/zh-cn/library/windows/apps/hh770544.aspx

如果大家读了App Settings的快速帮助的话,那么就会对App Settings有一定的理解了:
首先,我们的Settings Pane上面需要一些入口点,当点击这些入口点的时候,我们需要显示一个Flyout,这个Flyout包含了一些设置选项。
简单介绍一下流程:
1. 监听Settings Pane的CommsndsRequested事件。
2. 在关联的回调中指定命令,对于每条命令:
       1). 提供SettingsCommand.Id和SettingsCommand.Label
       2). 设置用户选择命令时触发的处理程序(SettingsCommands.Invoked)
       3). 将SettngsCommand对象添加到ApplicationCommands Vector中去。


以上的功能可以由SettingsPane类和SettingsCommand类来完成。

 1 ref new class SettingsPane sealed : Platform::Object
 2 {
 3 public:
 4     //获得当前的SettingsPane对象,该对象同App view相关联。
 5     static Windows::UI::ApplicationSettings::SettingsPane^ GetForCurrentView();
 6     //显示该SettingsPane
 7     static un-knownType Show();
 8     //SettingsPane 显示在屏幕的左边还是右边
 9     static property SettingsEdgeLocation Edge { get; }
10     //用户打开Settings Pane时被触发,在它的回调方法中添加入口点
11     event TypedEventHandler<SettingsPane^,SettingsPaneCommandsRequestedEventArgs^>^ CommandsRequested;
12 }
SettingsCommand类的构造函数:

SettingsCommand([Windows::Foundation::Metadata::VariantAttribute] Platform::Object^ settingsCommandId, Platform::String^ label, Windows::UI::Popups::UICommandInvokedHandler^ handler)

总的步骤如下:
using namespace Windows::UI::ApplicationSettings;
using namespace Windows::UI::Popup;

 1 void MainPage::OnNavigatedTo(NavigationEventArgs^ e)
 2 {
 3     (void) e;    // Unused parameter
 4     setSettingsPane();
 5 }
 6 
 7 void MainPage::setSettingsPane()
 8 {
 9     commandsRequestedEventRegistrationToken = SettingsPane::GetForCurrentView()->CommandsRequested +=
10         ref new TypedEventHandler<SettingsPane^, SettingsPaneCommandsRequestedEventArgs^>(this, &MainPage::onCommandRequested);
11 }
12 
13 void MainPage::onCommandRequested(SettingsPane^ settingsPane, SettingsPaneCommandsRequestedEventArgs^ e)
14 {
15     UICommandInvokedHandler^ handler = ref new UICommandInvokedHandler(this, &MainPage::onSettingsCommand);
16     SettingsCommand^ generalCommand = ref new SettingsCommand("generalSettings","General",handler);
17     e->Request->ApplicationCommands->Append(generalCommand);
18     SettingsCommand^ helpCommand = ref new SettingsCommand("helpPage","Help", handler);
19     e->Request->ApplicationCommands->Append(helpCommand);
20 }
21 
22 void MainPage::onSettingsCommand(
23     Windows::UI::Popups::IUICommand^ command)
24 {
25     SettingsCommand^ settingsCommand = safe_cast<SettingsCommand^>(command);
26     output->Text = settingsCommand->Label + "on SettingsPane clicked!";
27     output->Text += SettingsPane::Edge.ToString();
28     //不需要显式地删除token,再次点击按钮的时候,如果SettingsPane在显式,会自动关闭掉,如果删除了token,
29     //那么SettingPane上不再有Entry Point
30     //SettingsPane::GetForCurrentView()->CommandsRequested-= commandsRequestedEventRegistrationToken;
31 }
32 
33 void OnlyAppSettings::MainPage::Button_Click_1(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
34 {
35     SettingsPane::Show();
36 }
37 
Note:
如果下面有一条成立,那么Show()将会报异常,或者关闭
It is called from snapped app,
It is called when the current app does not have focus
It is called when the pane is already displayed.



需要注意的是,Settings的Header在做动画的时候需要有100的offset,内容200的offset:
            <!-- Header area for panel -->
            <Grid Background="#FF7700FF" Grid.Row="0">

                <Grid Margin="20,19,17,13">

                    <Grid.Transitions>
                        <TransitionCollection>
                            <EntranceThemeTransition FromHorizontalOffset="100" />
                        </TransitionCollection>
                    </Grid.Transitions>

                </Grid>

            </Grid>


1 <!-- Settings Panel Content -->
2             <Grid Grid.Row="1" Margin="20,24,23,0" VerticalAlignment="Top" Background="Transparent">
3                 <Grid.Transitions>
4                     <TransitionCollection>
5                         <EntranceThemeTransition FromHorizontalOffset="500" /> //这里只要跟上面不一样,有点效果就可以了
6                     </TransitionCollection>
7                 </Grid.Transitions>
8                 <ContentControl x:Name="_settingscontent" Background="Transparent"/>
9             </Grid>


一首比较好听的歌 yellow submarine Various artists <kids will rock you>2004

下章研究一下国际化的问题。


posted on 2013-01-09 13:51 Dino-Tech 阅读(1190) 评论(0)  编辑 收藏 引用 所属分类: Windows 8

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理