wp7的资源、样式与事件处理

   所谓资源,就是指项目中任意的非可执行的数据文件,通常包括项目中的图片、音频、视频与字体等各种文件,在wp7里面,通过这些文件

的引用,可以构造出一个绚丽的应用。

一:资源文件及其部属

资源文件的部属一般有三种:方式1:打包在XAP文件包中的独立文件

                       方式2:嵌入在dll程序集中的文件

                       方式3:按需检索的独立文件

当我们引入一个资源文件的时候,我们要设置其Build Action(右键单击引入的资源文件,例如图片,然后单击属性,就可以设置其Build

Action属性),通常可用的属性有三种:Content(选择此属性,资源文件将以方式1打包在XAP里面,我们可将XAP的后缀名改为rar,解压后会发

现引用的资源文件就会包含在里面);Resource(选择此属性时,资源文件将以方式2的潜入程序集里面);None(选择此项属性时,编译器不会对

该文件进行任何的操作,需开发者自行将其部属为按需文件),通常情况下我们都会选择Content的形式进行资源文件的部署。此外对于资源文

件的另一个重要的属性就是Copy to Output Directory,此属性决定是否在编译时将文件复制到输出目录,对于Build Action的属性设置为

Content/Resource的资源文件,此属性设置为Don not copy,因为该文件已经存在于XAP里面。而None类型的文件,此属性通常设置为Copy

always或Copy if never,这样在编译时文件将会被复制到XAP文件夹所在的目录,从而易于被程序使用。

二:资源文件的访问(新建一个项目Demos8)

  引入资源文件后,我们就要对其进行访问:

  1:绝对的Uri形式,例如:http://www.baidu.com/image/logo.jpg。当能够精确的确定到文件的路径,可用此种的形式。

2:基于应用程序跟的相对Uri,以前导斜杠开始,例如/images/rest.jpg(在此处应当注意的是,在wp7里面,应用程序的根是指XAP包的根文件

夹,一般对应项目的根目录,注意是XAP包的根文件夹,例如:bin\Debug\Demos8.xap而不是Bin\Debug)

3:基于当前XAML文件位置的相对Uri,不以前导斜杠开始,例如:Images/rest.jpg  ./Images/rest.jpg  rest.jpg("./代表当前文件夹,写与不

写效果一样","../代表上一级文件夹,用于回退","/"代表项目根目录)

4:当引用资源文件的Build Action的属性设置为Resource的时候,用这类方式引用文件:/Demos8;component/Imagesrest.jpg(component为关

键字,其前面的符号为分号)

总结:通常当Build Action的属性为Content时候,引用可通过Images/rest.jpg或者./Images/rest.jpg或者/Images/rest.jpg的任意一种就行

;当设置为resource的时候,就用关键字的那种就行;对于None的。可利用绝对Uri的形式进行访问

三:资源字典

  1:直接资源字典,示例如下

<Grid.Resources>   //定义控件基本的资源字典            

<LinearGradientBrush x:Key="1" EndPoint="1,0.5" StartPoint="0,0.5">                    

<GradientStop Color="Black" Offset="0" /> <GradientStop Color="#FFB4B409" Offset="1" />

</LinearGradientBrush>          

</Grid.Resources>

  

//引用资源字典如下:

<Button Content="Button" Background="{StaticResource 1}" Height="72" HorizontalAlignment="Left" Margin="60,200,0,0" Name="button2" VerticalAlignment="Top" Width="229" />            

<TextBox Height="72" Background="{StaticResource 1}" HorizontalAlignment="Left" Margin="0,308,0,0" Name="textBox1" Text="TextBox" VerticalAlignment="Top" Width="460" />           

<Ellipse Height="100" Fill="{StaticResource 1}" HorizontalAlignment="Left" Margin="121,386,0,0" Name="ellipse1" Stroke="Black" StrokeThickness="1" VerticalAlignment="Top" Width="200" />

定义资源字典的时候,要借助于关键字X:Name或者X:Key,引用的时候通过StaticResource关键字加上标示名字就行,定义在Grid里面的资源文件,其子控件通过引用标示都可以实现共享

 

此外还有页面资源文件,上面的效果达不到理想的资源共享范围,页面资源字典可以实现整个页面的资源共享,代码如下

<phone:PhoneApplicationPage.Resources>        

<!--<LinearGradientBrush x:Key="1" EndPoint="1,0.5" StartPoint="0,0.5">            

<GradientStop Color="Black" Offset="0" /> <GradientStop Color="#FFB4B409" Offset="1" />       

</LinearGradientBrush>-->    

</phone:PhoneApplicationPage.Resources>

与上面的控件级别的资源字典定义相比,只是改变了资源字典定义的位置,引用通过相同的方法

2:应用程序资源字典,定义在App.xaml页面,共享范围更宽阔

<Application.Resources>        

<LinearGradientBrush x:Key="1" EndPoint="1,0.5" StartPoint="0,0.5"> <GradientStop Color="Black" Offset="0" />            

<GradientStop Color="#FFB4B409" Offset="1" />       

</LinearGradientBrush>  

  </Application.Resources>

引用方法相同

  

四:样式

 1:属性样式就是直接通过UI元素设置的样式,类似于HTML里面的元素属性设置样式

<TextBox Height="72" HorizontalAlignment="Left" Margin="43,416,0,0" Name="textBox3" Text="TextBox" VerticalAlignment="Top" Width="363"  />

2:内联样式(通过元素嵌入Style节点来设置样式)

 <TextBox  Height="115" HorizontalAlignment="Left" Margin="43,44,0,0" Name="textBox1" Text="TextBox" VerticalAlignment="Top" Width="349" >
                <TextBox.Style>
                    <Style TargetType="TextBox">
                        <Setter Property="Background" Value="Yellow"/>
                        <Setter Property="Foreground" Value="Red"/>
                     </Style>
                </TextBox.Style>
            </TextBox>

 

 TargetType属性指定Style对象的目标类型,每个Setter通过Property指明要设置的属性名,通过Value设置该属性的值

 

3:引用样式

3.1页面级样式

  <phone:PhoneApplicationPage.Resources>//定义样式
        <Style TargetType="TextBox" x:Key="3">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="BorderBrush" Value="Blue"/>
        </Style>
        <Style TargetType="TextBox">
            <Setter Property="Background" Value="Yellow"/>
           
        </Style>
    </phone:PhoneApplicationPage.Resources>

  

//引用样式

 <TextBox Height="72" Style="{StaticResource 3}" HorizontalAlignment="Left" Margin="43,256,0,0" Name="textBox2" Text="TextBox" VerticalAlignment="Top" Width="363" />
  <TextBox Height="72" HorizontalAlignment="Left" Margin="43,416,0,0" Name="textBox3" Text="TextBox" VerticalAlignment="Top" Width="363"  />

textbox2显示的引用了样式3,就会出现样式3定义的效果。下面的textbox3没显示引用任何的样式,经过实验的发现,其不会引用页面资源样式,即不会隐式的引用没有通过关键字限定的样式。

3.2应用程序级样式

 <Application.Resources>
        <Style TargetType="TextBox" x:Key="3">
            <Setter Property="Background" Value="Yellow"/>
             </Style>
        <Style TargetType="TextBox" x:Key="4" BasedOn="{StaticResource 3}">
            <Setter Property="BorderThickness" Value="5"/>
            <Setter Property="BorderBrush" Value="DarkBlue"/>
        </Style>
    </Application.Resources>

应用程序级的样式是定义在APP.xaml文件里面的,作用域为整个应用程序,此处的BasedOn="{StaticResource 3}"相当于继承,意思是在继承x:Key="3"的一些样式基础上,又拥有自己定义的一些样式,前提是x:Key="3"的应用必须提前的存在。

样式的优先级别是,属性样式的优先级最高;内敛样式与引用样式是互斥的,即拥有内联样式的时候,引用样式不再起任何作用;页级别的引用样式高于应用程序级别的引用样式。


五:系统主题资源

是系统内置的一些静态资源,包括一些常用的样式,颜色,画刷,字体等

<TextBox Height="72" BorderBrush="{StaticResource PhoneTextCaretBrush}" FontSize="{StaticResource PhoneFontSizeNormal}"  HorizontalAlignment="Left" Margin="43,416,0,0" Name="textBox3" Text="TextBox" VerticalAlignment="Top" Width="363"  />

需要注意的一点是,必须保证引用资源的属性与被应用资源之间的类型匹配。否则会引发异常。如BackGroundBrush属性必须引用Brush类型的资源,若引用Color的资源就会发生异常。

 

六:事件的处理

事件的处理在winform里面十分多,此处的事件都是大同小异的,所以不再过多的作介绍

Touch类

 Touch是一个静态类,只包含一个静态成员:FrameReported事件(对Touch的具体应用以后再补充)

          

posted @ 2012-04-05 13:24  love c#  阅读(441)  评论(3编辑  收藏  举报