WPF笔记5——动态资源(DynamicResource)
动态资源(DynamicResource)是WPF中的一种引用资源的方式,即在运行是查找资源。
与StaticResource性比,DynamicResource的性能稍差,因为每次要资源时,都要进行查找。
如果资源是在引用它的元素之后定义的,或者资源的值在应用程序运行期间发生变化,那么使用DynamicResource引用的员会自动更新以反映这些变化。
1、在xaml中定义一个资源,并动态引用:
点击查看代码
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<SolidColorBrush x:Key="MyDynamicBrush" Color="Red"/>
</Window.Resources>
<Grid>
<Button Background="{DynamicResource MyDynamicBrush}" Content="Click Me"/>
</Grid>
</Window>
2、在代码中操作资源
点击查看代码
//获取资源自动
ResourceDictionary resources = this.Resources;
//通过资源的键(x:key值)来获取或设置资源
if (resources.Contains("MyDynamicBrush"))
{
SolidColorBrush brush = (SolidColorBrush)resources["MyDynamicBrush"];
brush.Color = Colors.Green;
}
当动态资源发生变化时,WPF会自动更新UI。
但是有时候需要在资源变化时执行一些额外的逻辑。可通过监听资源变化事件来实现。
例如:为资源字典的ResourceChanged事件添加一个处理程序:
点击查看代码
resources.ResourceChanged += Resources_ResourceChanged;
private void Resources_ResourceChanged(object sender, ResourceChangedEventArgs e)
{
if (e.Key == "MyDynamicBrush")
{
// 在这里执行资源变化后的其他操作,比如记录日志等
}
}