1 Window.Resources
1.1 资源的声名和使用
资源是可以应用到不同位置上重复使用的对象,是资源使 样式 和 模板 可以重复使用。每个WPF界面元素控件都拥有 Resources 属性,(属性类型:ResourceDictionary)也就是资源字典,其是以键值对的形式存储。当需要某个资源时,可以通过 资源键 索引到 资源对象。
这个例子在Window控件根下声明:
两个纯色画刷资源,x:key 定义资源唯一标识,定义了颜色值。
图中按钮宽度是xaml中的常量资源(c#中的Double类型),需要引入命名空间。
xmlns:system="clr-namespace:System;assembly=System.Runtime"
在xaml中通过 {StaticResource 资源键 } 使用资源
编辑效果图:
以上提到WPF元素都具有Resources属性,XAML加载程序处理Border上的Background属性值时,会先查看Border元素的资源字典。如果没有,就在上一级Grid查询,以此类推直到在Window中找到。否则会抛出找不到资源异常。
在Window根元素定义资源好处是:该窗体范围内所有元素都可以使用到该资源,避免代码冗余。
1.2 静态和动态资源
以上内容在使用资源时,用到了StaticResource标记资源键。程序加载后,没办法改变。
静态资源StaticResource标记后 :指程序加载后,不需要改变的资源。
动态资源DynamicResource 标记后 : 指程序加载后,可以通过用户操作事件,触发改变的资源。
以上内容将StaticResource标记改为DynamicResource 标记,Button元素添加Click单击事件。
// 程序后台改变资源
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
// #2e6a99 #f49926 RGB颜色值
this.Resources["Brush1"] = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#2e6a99"));
this.Resources["Brush2"]=new SolidColorBrush((Color)ColorConverter.ConvertFromString("#f49926"));
}
单击事件后,
1.3 资源的3种声明方式
1:Window根下声明,范围:窗体下的元素都可以访问资源。上文已演示。
2:App.xaml文件下声明,范围:所有窗体的元素都可以访问该资源。
3: 创建资源字典文件声明,通过MergedDictionarier 属性合并到App.xaml文件中。
范围:和第2种一样,当资源较多时,可以对App.xaml文件进行解耦,避免代码冗余。
资源字典文件TextBlockDic.xaml在App.xaml文件中合并。