Style的用法
首先在XAML里定义,作为资源字典的一部分:

<!-- Add one item to the page's resource dictionary -->
 
<phone:PhoneApplicationPage.Resources>

   
<!-- A style for the two text blocks in WaitingForCallPanel -->
   
<Style x:Key="WaitingTextStyle" TargetType="TextBlock">
      <
Setter Property="Foreground" Value="#99FFFFFF"/>
      <
Setter Property="FontFamily"
             
Value="{StaticResource PhoneFontFamilySemiBold}"/>
      <
Setter Property="FontSize" Value="23"/>
    </
Style>

  </
phone:PhoneApplicationPage.Resources>

就可以直接在XAML中引用了:

  <TextBlock x:Name="TapToHideTextBlock" Margin="11,0,0,0"
                 Text="(tap screen to hide)"
                 Style="{StaticResource WaitingTextStyle}"/>
 
注意,Style中不支持动态绑定,向下面这样是不行的:

image

App的生命周期
app退出的两种状态:closed和deactived(deactived也称作tombstoned)
打开closed的程序,则程序重新初始化。
打开deactived的程序,则程序继续执行。
变为closed的唯一方法:在程序初始页面点back按钮。也正因为这一点,其他退出程序的方式都应该是deactive,也就是在back stack里能找得回来。
image
 
Deactived的程序不保证能再次active,因为内存不足或者关机的原因。
通过触摸图标打开程序(无论该程序之前是否被打开),都是launch而不是active。重新打开后,会使得之前在back stack中的该程序页面被删除。
 
Obscured和Unobscured事件
当有来电、接到toast通知、或锁屏的时候,会触发Obsured事件,如果用户接起电话切出当前程序,则触发Deactived事件。
一个Obscured的handler无法知道是具体什么原因造成的,唯一能知道的是是否由锁屏导致,方法是查看事件参数的IsLocked属性。
 
在App.xmal里指定事件handler
    <Application.ApplicationLifetimeObjects>
        <!--Required object that handles lifetime events for the application-->
        <shell:PhoneApplicationService 
            Launching="Application_Launching" Closing="Application_Closing" 
            Activated="Application_Activated" Deactivated="Application_Deactivated"/>
    </Application.ApplicationLifetimeObjects>
Application state 和 Page state
要永久保存状态,用isolated storage,要暂时保存状态则用两个dictionary:application state和page state。
 
image
 

程序在actived之后,仍然可以存取刚才保存在application state和page state中的变量。注意,无论是close掉还是重新launch,都会清空。

这些临时性的state可以用来当缓存,例如存放从网络获取到的数据(actived回来就不必再重新获取了),再如DataContext也可以作为state字典的一个entry。

一般地,我们在OnNavigatedTo中决定从哪里读取,在OnNavigatedFrom决定存到哪里。

要保证deactived handler中所做的事情包含了closing handler所做的事情,因为如果在closing的时候要保存数据,那么在deactived的时候也需要保存。因为程序如何关闭取决于用户的行为,不能保证closing事件必定被触发。

 

ControlTemplate

每个控件(Control)都有一个Template属性,其类型叫做ControlTemplate。其作用是改变控件的样式。

在自定义样式的同时,依然需要控件的其他属性,这需要TemplateBinding。这块内容比较庞大,具体用法可参加:

http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html

posted on 2011-10-18 21:03  MainTao  阅读(289)  评论(0编辑  收藏  举报