WPF中的x:Static和StaticResource的用法区别(入门向)

WPF中的x:Static和StaticResource的用法区别(入门向)

    • x:Static
    • StaticResource

学习使用WPF已经有一段时间了,最近看WPF编程宝典这本书,发现可以在XAML中使用x:Static来引用code behind的做法,一时想不起来这个语法该怎么用了,(因为在MVVM框架中很少有使用x:Static这种语法的)。所以就想趁着写点东西复习一下。

x:Static

记得最早在学习WPF的时候,新建一个窗口或者页,都会伴随着XAML文件的生产也会有一个xaml.cs文件,然后如果想引用对应xaml.cs文件中写的公共静态属性(或者字段)值,就可以使用{x:Static local:MainWindow.PublicProperty} 来使用该值,local 表示的是引用空间,就是你需要引用类所在的namespace,MainWindow表示的是你需要的值所在的类名称,PublicProperty表示的是那个有你需要值的公共静态属性或字段。注意这个绑定不是那么智能,比如你的公共静态属性是int类型,而前端需要的是string类型(比如TextBox.Text),这时候就需要你自己将code behind中的int类型转换成string类型,否则会报错。

StaticResource

可能由于x:Static不会智能转换,所以才被用的越来越少了,当然我这是瞎扯,但最起码看到x:Static不是那么灵活,相反StaticResource就灵活多了。
最近在学习使用MVVM架构,发现StaticResource真的是用的好多,我总结了以下几种可以使用StaticResource的地方,由于刚学习MVVM,所以肯定不是它的全部用法。

  1. 资源词典

由于你在使用WPF在做前端的时候,希望能够把所有的控件都统一成一种样式,而不至于在每个XAML文件前边的Resources里再写样式,控件模板什么的,ResourceDictionary就非常有必要了,你可以将你写好的ResourceDictionary放到你的项目文件夹下,比如我们写了个叫ButtonStyleRD的资源词典,然后里面有个叫buttonRadius8Style的样式。然后在App.xaml里添加ButtonStyleRD的相对地址,然后你就可以在你新创建的UserControl里的一个按钮里,写上

// 我们假设在词典ButtonStyleRD中有个名叫(其实是x:key名称,x:name名称不好使)buttonRadius8Style的style样式。
< style="{StaticResource buttonRadius8Style}" >

那么这个按钮就拥有了该样式,不用再重写,代码还更简洁。
甚至你可以直接从github上down下一个样式库,然后在你的App.xaml里也添加该样式库的引用,同时在你的UserControl里也添加该样式库,那么在你的UserControl也可以直接使用StaticResource来使用该样式。

  1. 业务界面与后端逻辑的数据绑定

它应该可以将业务界面的数据与后边逻辑的数据进行绑定,跟x:Static的功能有些类似,但感觉更强大。最近在学习MVVM,发现使用StaticResouce来绑定ViewModel层里的控件值或者Model层里的基本类型值是非常好用的*(这里有个疑问,因为我学习的时候总是被告知ViewModel层里放的是有关View的东西,所以你如果有个控件正好是View层里某个ContentControl的Content的话,那么也应该放在ViewModel层里,因为这个控件是管着View的,但我总感觉这个是不是应该放在Model层里,希望有人能够告知)*,比如你在Model层里定义了一个int属性TextBoxInt,然后在View中的TextBox的Text属性想引用这一int属性值,那么只需要在XAML中使用:

// 这里的MainWindowModel指的是ViewModel层里实例化的Model实例,ViewModel层类叫MainWindowViewModel。
< Text="{StaticResource MainWindowModel.TextBoxInt}" >

这样就可以完成数值的绑定,而且还会自动把你的int型转换成string型,这点可以说是很不错了。

写到这我突然发现好像我就知道这两种用法,当然随着后边学习用法肯定更多。但说实话,要不是学习MVVM架构,我可能也不会用StaticResource用的这么频繁,也可能不会试着去理解它。况且它还是这么能提高效率。

你可能感兴趣的:(MVVM)