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")
    {
        // 在这里执行资源变化后的其他操作,比如记录日志等
    }
}
posted @ 2024-11-26 14:10  青云Zeo  阅读(53)  评论(0编辑  收藏  举报