WPF 资源
1。资源文件经常要使用buildaction 设置属性内容为“资源或者Resources”。通常这种形式的资源叫做组件资源,内部是以二进制方式运行的,比如存储ico,位图等
有的资源仅仅是在局部范围内使用,比如定义到某个页面上的资源
所有的资源都定义在资源字典(ResourcesDictionary)中,而且有唯一的key对应。wpf中FrameElement,FrameContentElements以及Application类,当然还有他们的子类,都有Resources属性
例子1:将字体大小设置到属性中。局部属性的例子
新建一个window类,在一个xaml页面上添加 xmlns:s ="clr-namespace:System;assembly=mscorlib"。这个命名空间只是为了让我们可以访问Double类来设置字体大小
一级父容器是StackPanel
//这样就定义了stackpanle的资源,在stackpanel中的控件元素都可以使用这个资源。
定义资源要有一个唯一的Key。这个例子key就是font。double类在s空间中,所以这样设置。资源的内容就是22数字
<StackPanel>
<StackPanel.Resources>
<s:Double x:Key="font" >22</s:Double>
</StackPanel.Resources>
<StackPanel>
随便两个按钮控件引用属性
<StackPanel>
<StackPanel.Resources>
<s:Double x:Key="font" >22</s:Double>
</StackPanel.Resources>
<Button Name="tt" Content="aaaaaaaaa">
<Button.FontSize>
<StaticResource ResourceKey="font"></StaticResource>
</Button.FontSize>
</Button>
<Button Name="dd" Content="ffff" FontSize="{StaticResource font}"></Button>
</StackPanel>
这两个按钮控件引用资源的方式是不同的。一般来说第二种方式应该是比较简单的方法,而且比较通用
应该注意这个地方的资源都是静态资源StaticResources,还有一种类型的资源就是动态资源。
举例2:可以将控件元素定义到资源中
比如上面的stackpanel中可以定义一个button资源。
<StackPanel.Resources>
<s:Double x:Key="font" >22</s:Double>
<Button x:Key="btn" Content="xxx" FontSize="33"></Button>
</StackPanel.Resources>
然后在stackpanel中随便一个地方引用这个资源
<StaticResource ResourceKey="btn"></StaticResource>
运行以后就会发现这个资源按钮也可以显示出来的。但是这个资源按钮只是一个对象,不能被多次使用,只能使用一次,如果你在stackpanel中使用了两次资源按钮,或者在其他地方使用。都会报错。其实大部分的时候很少使用控件资源,我们使用资源一般是为了定义控件的某些属性而不是整个控件或者控件的全部属性。所以这个方法很少使用
3。查找资源
可以通过Resources[key]来得到资源。如果你是在window中定义的资源就可以使用this.Resources[key]来读取资源
如果是在window中的stackpanel定义资源,比如前面的例子,就要使用this.stackPanelID.Resources[key]来得到资源。
如果资源定义在父容器中。Resources[key]会以递归的方式向上一直查询到头,如果没有就会返回null了
4。使用X:Static引用类的静态属性和字段
比如在window的类文件cs中定义一个静态的属性
public static string GetName
{
get{ return "Hello world ";}
}
那么在前台的xaml文件中就可以使用这样代码来给控件设置内容属性
先添加对后台类的引用,在window标签内线使用 xmlns:src ="clr-namespace:WpfApplication1"
<Button name="zz" Content ="{x:Static src.Window1.GetName}" >//window1是定义GetName的类
使用这个x:Static可以很方便的得到类的静态字段和属性内容,因此比较合理的方法是将程序用到的内容全部封装到一个专门的静态类中,这样就可以方便的显示了
当然x:Static这个方法不能得到类的实例的字段或属性,更高级的方法是数据绑定的知识了
5 通过代码读取资源文件
添加一个txt文件当作资源文件,右键设置action操作为资源。通过GetResourceStream方法读取资源
例如:
Uri uri = new Uri(@"resources/help2.txt", UriKind.Relative);//这个就是所以的pack uri。
StreamResourceInfo info = Application.GetResourceStream(uri);
Stream s = info.Stream;
byte[] buffer = new byte[20484];
int count = s.Read(buffer, 0, 2048);
string x = Encoding.UTF8.GetString(buffer, 0, count);
6 还有两个方法读取内容文件和站点文件
本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。