WPF中的资源
WPF中资源分为 程序级资源 和 对象级资源 。
对象级资源
每个界面元素有一个Resources属性就是他自己的对象级资源
Resources 是ResourceDictionary类型,它继承自FrameworkElement.
Resources 中保存的是K-V形式数据,Value类型为object,使用时需要类型转换。
使用
1.引入命名空间
2.定义资源
3.引用资源
例:
xmlns:sys = "...System;...mscorlib"
...
<ResourceDictionary>
<sys:String x:Key = "str">ABCD</sys:String>
<sys:Double x:Key = "dbl">3.1415926</sys:Double>
</ResourceDictionary>
...
<TextBlock Text = "{StaticResource ResourceKey = str }"/>
...
string text = (string) this.FindResource("str");
可以用Source属性存储文件路径
<Window.Resources>
<ResourcesDictionary Source = "ShingRed.xaml"/>
</Window.Resources>
静态,动态资源的使用
<Button Content = "{StaticResource res1}"/>
<Button Content = "{DynamicResource res2}"/>
...
this.Resources["res1"] = new TextBlock(){Text = "ABC"}//无效
this.Resources["res2"] = new TextBlock(){Text = "ABC"}//有效
二进制资源
图标,图片,文本,音频,视频
字符串在Propertis中Resources.resx中添加
Resources的访问级别要由internal 改为 public
使用:
xmlns:prop = "...Properties"
...
<TextBlock Text = "{x:Static prop:Resources.UserName}"/>
...
this.textBlockPassword.Text = Properties.Resources.Password;
常常用在国际化,本地化中。换肤等。
图标,图片,音频,视频
在项目中新建文件夹目录,在文件夹上右键添加现有项,选中资源。
让文件编译成二进制:在文件上右键,属性,操作设置成Resource。
PackURI访问二进制资源
<Image x:Name = "ImageBg" strech = "Fill" Source = "Resource/Images/Rafale.jpg"/>
“Resource/Images/Rafale.jpg”—-Urikind.Rolative
“pack://application,,,/ Resource/Images/Rafale.jpg”—-Urikind.Absolute
Uri imgUri = new Uri(@"Resources/Images/Rafale.jpg",Urikind.Rolative);
this.imageBg.Source = new BitmapImagea(imgUri);