Metro学习笔记+心得+体会(一)

 

序言:

  最近Windows8消费者预览版刚刚出世,性能还算稳定,这不,前些天,我刚刚下来了Visual Studio11。其中最感兴趣的东西,莫过于Metro了。新事物嘛。于是又下载了一些示例源码,在学习的过程中,把一些技术方面觉得好的写成此系列博客。

  迎接10月份Windows8正式版的发布和应用商店的开启。。。。

 

正文:

    这是我写的第一个Metro程序,界面是这样的:

Metro学习笔记+心得+体会(一)_第1张图片

 

怎地,还算凑活吧?虽然这个Metro程序很简单,但毕竟也是我的第一个程序了。在此分享下源码,莫说我写的差劲。

 

这是状态切换所需的xaml:

 1       <VisualStateManager.VisualStateGroups>
 2           <VisualStateGroup>
 3               <VisualState x:Name="Fill"></VisualState>
 4                 <VisualState x:Name="Snapped">
 5                   <Storyboard>
 6                         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(StackPanel.Orientation)" Storyboard.TargetName="CenterContent">
 7                             <DiscreteObjectKeyFrame KeyTime="0">
 8                                 <DiscreteObjectKeyFrame.Value>
 9                                     <Orientation>Vertical</Orientation>
10                                 </DiscreteObjectKeyFrame.Value>
11                             </DiscreteObjectKeyFrame>
12                         </ObjectAnimationUsingKeyFrames>
13                       <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(StackPanel.Orientation)" Storyboard.TargetName="about">
14                           <DiscreteObjectKeyFrame KeyTime="0">
15                               <DiscreteObjectKeyFrame.Value>
16                                   <Orientation>Vertical</Orientation>
17                               </DiscreteObjectKeyFrame.Value>
18                           </DiscreteObjectKeyFrame>
19                       </ObjectAnimationUsingKeyFrames>
20                   </Storyboard>
21               </VisualState>
22               <VisualState x:Name="Full">
23                   <Storyboard>
24                         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(StackPanel.Orientation)" Storyboard.TargetName="CenterContent">
25                             <DiscreteObjectKeyFrame KeyTime="0">
26                                 <DiscreteObjectKeyFrame.Value>
27                                     <Orientation>Horizontal</Orientation>
28                                 </DiscreteObjectKeyFrame.Value>
29                             </DiscreteObjectKeyFrame>
30                         </ObjectAnimationUsingKeyFrames>
31                         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(StackPanel.Orientation)" Storyboard.TargetName="about">
32                             <DiscreteObjectKeyFrame KeyTime="0">
33                                 <DiscreteObjectKeyFrame.Value>
34                                     <Orientation>Horizontal</Orientation>
35                                 </DiscreteObjectKeyFrame.Value>
36                             </DiscreteObjectKeyFrame>
37                         </ObjectAnimationUsingKeyFrames>
38                     </Storyboard>
39               </VisualState>
40           </VisualStateGroup>
41       </VisualStateManager.VisualStateGroups>


这是代码:

            Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().ViewStateChanged += BlankPage_ViewStateChanged;//加在窗口的构造函数中,相应事件

 1             switch (args.ViewState)
 2             {
 3                 case Windows.UI.ViewManagement.ApplicationViewState.Filled://占约2/3窗口显示
 4                     {
 5                         VisualStateManager.GoToState(this, "Fill", false);
 6                         break;
 7                     }
 8                 case Windows.UI.ViewManagement.ApplicationViewState.FullScreenLandscape://正常显示
 9                     {
10                         VisualStateManager.GoToState(this, "Full", false);
11                         break;
12                     }
13                 case Windows.UI.ViewManagement.ApplicationViewState.Snapped://占约1/3显示
14                     {
15                         VisualStateManager.GoToState(this, "Snapped", false);
16                         break;
17                     }

除以上三种模式,还有一种FullScreenPortrait,表示窗口纵向显示时的状态,相当于正常状态下旋转90度。

在这个示例里,还运用了几种不常用的空间:即RichTextBlock和RichTextBlockOverflow。这些控件有一个OverflowContentTarget属性,在这个属性里(Binding)可以绑定一个控件,当原控件空间不足时,就将多余的文本显示在绑定的控件中,而文本只可以放在RichTextBlock,而不是RichTextBlockOverflow。并且是通过一个段落显示的。

xaml:

1                     <RichTextBlock Padding="20" Grid.Row="2" Grid.Column="0"  OverflowContentTarget="{Binding ElementName=firstrich}" FontSize="{Binding ElementName=sli,Path=Value}" MaxHeight="500">
2                         <Paragraph  >
3                             <Run x:Name="txt" Text="{Binding ElementName=box,Path=Text}"></Run>
4                         </Paragraph>
5 
6                     </RichTextBlock>
7                     <RichTextBlockOverflow Padding="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  Grid.Row="2" Grid.Column="1" x:Name="firstrich"   OverflowContentTarget="{Binding ElementName=secondrich}" MaxHeight="500"/>
8                     <RichTextBlockOverflow Padding="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  Grid.Row="2" Grid.Column="2" x:Name="secondrich"  MaxHeight="500" />

 

这就是我这程序里所有的内容了,最后,献上源代码一份,望各位笑纳:

下载地址:

************ http://files.cnblogs.com/Wade-/%E6%BA%90%E4%BB%A3%E7%A0%81.rar*****************

 

 

本博客为原创,版权为作者和博客园共有,若要转载请在文章的显眼处注明出处。

 

你可能感兴趣的:(metro)