- 用户可以客户化主题
- 例如可以选择亮或者灰暗的背景
- 有10中主题颜色(accent colors)可供选择
- silverlight可以自动检测到主题
- 应用程序自动应用用户选择的主题
- 开发人员可以客户化具体的控件并覆盖主题的方案
- 对于Silverlight控件的样式,我们可以看到一张图:
其中红色部分就是传说中的样式,而具体的样式定义是在
这样一个路径下的一个ThemeResources.xaml,在同目录下的另一个文件System.Windows.xaml定义了silverlight for windows phone标准控件的模板
-
数据绑定
- 数据绑定为silverlight程序提供了一种简单的数据呈现与交互的方式,使得呈现与程序逻辑分离
- 一旦建立绑定关系,UI和数据对象可以自动同步数据
- 绑定方式:
下面还是跟林永坚老师的例子一样,通过滑动Silder控件来改变TextBlock的文字大小;找到TextBlock的属性fontsize
-
选择应用数据绑定之后就会弹出另一个选择对话框如图:
选择Slider1就可以了,Path选择VAlue,这样一个简单的绑定就完成了,被绑定的元素的fontsize就绑定到了slider的value,数据绑定模式为OneTime
-
数据绑定模式分三种:
- One Time目标控件属性只更新一次,以后的会被忽略掉
- One Way数据对象的值会被同步到目标控件的属性,但是目标控件属性的改变不会更新到数据对象中
- Two Way目标控件的属性和数据对象的值相互更新
- 继承one way和two way绑定的数据对象必须继承与InotifyPropertyChanger
- 上面的数据绑定是绑定到一个UI元素上,并不是说只能绑定到UI上,因为可以绑定到所有的CLR对相声行,我们还可以绑定到自定义的类上,首先创建一个PostcodeClass,因为我们要用到双向绑定模式,所以需要继承借口INotifyPropertyChanged
using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.ComponentModel; namespace PostCodeManager { public class PostCodeClass:INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private int postcode; public int PostCode { get { return postcode; } set { postcode = value; address = PostCodeQuery.Instance.GetAddressByPostCode(postcode); if (PropertyChanged != null) { PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Address")); } } } public string address = "木有找到"; public string Address { get { return address; } set { address = value; } } } }
类 定义好了,接下来就是在Xaml文件里使用了,第一步添加名称空间,然后把这个类作为静态资源的形式引进来如下图:
这样就可以使用了,使用方法如下:
第一个红框说的是把TextBlock的文本属性绑定到PostcodeClass的PostCode属性上,而且Mode=TwoWay,第二个Textblock的文本属性绑定到PostcodeClass的Address属性上,这样就表示当这个TextBlock的Text发生改变的时候,它就会自动的把更改同步到他的数据对象里,数据对象就会把Address更新到第二个TextBlock;