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的具体应用以后再补充)