WPF学习笔记--资源

 

简单的说,资源也就是在dictionary中存储。是Key和Value的对应。

通常定义资源的方式就是直接在XAML中定义。如:

<Window.Resources>
<SolidColorBrush x:Key="myBrush" Color="Red" />
</Window.Resources>

放在Window.Resources标签中的资源属于整个窗体。任何框架元素都可以拥有资源。通常将资源定义在Window、Page甚至Application中。

定义了资源之后,我们就可以这样引用它: 

<Button BorderBrush="{StaticResource myBrush}" ...>7</Button>

这句话的意思就是找到Key为myBrush的静态资源,并将其值赋给BorderBrush属性。

所谓静态是值不发生变化,相对于动态而言的。

如果有多个控件的BorderBrush属性需要设置为统一的值,为了便于日后维护,就可以使用如上的方法。其实,这种方法还是有所不便:你要为每个控件做如上的赋值。

资源只能被位于拥有资源的对象内部使用,也就是说可以有拥有资源的对象自己或者其内部包含的对象使用。资源查找的方式是沿着层级关系向上查找。

也可以使用专门的XAML文件来定义资源。如,可将下列代码保存到一个单独的XAML文件。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/
presentation"
xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml"
>
<SolidColorBrush x:Key=" myBrush" Color="Yellow"/>
</ResourceDictionary>

然后讲文件包含到对象的资源定义中去。

<Window.Resources>
<ResourceDictionary Source="Dictionary1.xaml"/>
</Window.Resources>

如果资源定义需要包含多个资源文件,可以使用MergedDictionary。

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml"/>
<ResourceDictionary Source="Dictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>

也可以在定义资源时,即包含资源文件,又包含直接定义的资源:

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml"/>
<ResourceDictionary>
<SolidColorBrush x:Key="myBrush" Color="Red" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>

如果重复定义了资源,则后定义的资源有效。

在代码中使用资源:

我们可以使用查找的方式:

button9.BorderBrush = (Brush)FindResource("myBrush");

也可以这样,以免在找不到资源时抛出异常:

button9.BorderBrush = (Brush)TryFindResource("myBrush");

添加或者更新资源的方法很简单:

this.Resources["myBrush"] = new SolidColorBrush(Colors.Green);

这里this表示窗体。如果需要操作当前应用程序的资源,可以这样做:

Application.Current.Resources["myBrush"] = new
SolidColorBrush(Colors.Green);

 

动态资源

如果我们使用的资源可以在定义后发生变化,希望此变化体现到使用此资源的对象上,需要使用动态资源,操作的方法如此简单,只是需要把使用静态资源方式中的StaticResource换为DynamicResource。

<Button BorderBrush="{DynamicResource myBrush}" ...>7</Button>

使用动态资源时,只有在需要的时候才会读取资源的值。

在代码中使用动态资源的方法也很简单:

button9.SetResourceReference(Button.
BorderBrushProperty,"myBrush");

 

依赖属性

WPF使用Dictionary存储依赖属性,其读写的方法如下:

public Color BackColor
{
get {return (Color)GetValue(BackColorProperty);}
set {SetValue(BackColorProperty,value);}
}

依赖属性只有在赋值后才会出现在Dictionary中。

可以在代码中定义资源,然后引用。如:

<Rectangle Fill="{x:Static SystemColors.WindowBrush}" />

但如果喜欢其值跟着发生变化,则可以这样:

<Rectangle
Fill="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" />

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值