面试必问-WPF中资源的静态资源的使用

点击关注不迷路,你们的关注是我们最大的动力,

bilibili:物联网大联盟-Gavin加文

官网:http://www.dotnet123.com


第七节:WPF中资源的使用--静态资源的使用


为什么要用资源文件

在WPF(Windows Presentation Foundation)中,静态资源(Static Resources)是一种非常有用的资源管理方式,允许你在应用程序的XAML中定义一次资源,然后在多个地方重复使用这些资源,如样式、颜色、字体等。静态资源在应用程序启动时加载一次,并且在整个应用程序的生命周期内保持不变。这使得管理大型项目中的UI元素变得更加容易和高效。

如何定义静态资源

在WPF中,你可以在ResourceDictionary中定义静态资源。ResourceDictionary可以位于多种地方,

比如App.xaml、Window.xaml或UserControl.xaml的根元素中。下面是一个在Window.xaml中定义静态资源的例子:

定义了一样style,这个样式只能应用于button,他的字体是16号,他的字体的颜色是蓝色

`<Application x:Class="MyAgvLesson.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:MyAgvLesson"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <SolidColorBrush x:Key="BrushColor" Color="Blue"/>
        <Style x:Key="ButtonStyle" TargetType="Button">
            <Setter Property="FontSize" Value="16"/>
            <Setter Property="Foreground" Value="{StaticResource BrushColor}"/>
        </Style>
    </Application.Resources>
</Application>`
使用静态资源

如果在ResourceDictionary中定义了资源,你就可以在XAML的其他部分通过StaticResource`标记扩展来引用这些资源了。下面是如何使用上面定义的资源:

<Grid>  
    <!-- 使用颜色资源 -->  
    <Rectangle Fill="{StaticResource BrushColor}" Width="100" Height="100"/>  
  
    <!-- 使用样式资源 -->  
    <Button Content="Click Me" Style="{StaticResource ButtonStyle}"/>  
</Grid>
注意事项
  • 资源查找顺序:当XAML解析器尝试解析一个静态资源引用时,它会在当前元素的资源字典中查找该资源。如果没有找到,它会向上遍历元素树,在父元素的资源字典中查找,直到找到或到达根元素为止。

    先从窗体开始找,如果找到不到,就是app.xaml里,如果再找不到,就是字典。

  • 与动态资源的区别:静态资源与动态资源的主要区别在于它们何时更新。静态资源在第一次访问时解析,并在整个应用程序的生命周期内保持不变。而动态资源在每次访问时都会重新解析,因此如果资源字典中的资源被更改,动态资源引用将反映这些更改。

  • 性能考虑:由于静态资源在应用程序启动时加载一次,并且不会更改,因此它们通常比动态资源具有更好的性能。但是,如果你需要资源能够响应更改,则应该使用动态资源。

把资源文件独立存放,此文件放到Resources文件夹下建立了一个button.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="Brush" Color="Red" />
    <Style x:Key="ButtonStyle" TargetType="Button">
        <Setter Property="Background" Value="{StaticResource Brush}" />
        <Setter Property="FontSize" Value="16" />
    </Style>
</ResourceDictionary>
合并资源文件

有两种主要方法可以将资源字典合并到你的应用程序或特定控件的资源中:

1、在App.xaml中合并(全局可用) 打开App.xaml文件,在<Application.Resources>标签内使用<ResourceDictionary.MergedDictionaries>来合并资源字典:

<Application x:Class="YourNamespace.App"  
             ...  
             StartupUri="MainWindow.xaml">  
    <Application.Resources>  
        <ResourceDictionary>  
            <ResourceDictionary.MergedDictionaries>  
                <ResourceDictionary Source="button.xaml" />  
                <!-- 可以合并多个资源字典 -->  
            </ResourceDictionary.MergedDictionaries>  
            <!-- 这里可以定义其他全局资源 -->  
        </ResourceDictionary>  
    </Application.Resources>  
</Application>

2、在特定控件中合并(局部可用)

如果你只想让资源在特定控件或窗口中可用,你可以在该控件或窗口的XAML文件中使用相同的方法。例如,在MainWindow.xaml中:

<Window x:Class="YourNamespace.MainWindow"  
        ...>  
    <Window.Resources>  
        <ResourceDictionary>  
            <ResourceDictionary.MergedDictionaries>  
                <ResourceDictionary Source="Styles.xaml" />  
            </ResourceDictionary.MergedDictionaries>  
            <!-- 这里可以定义其他局部资源 -->  
        </ResourceDictionary>  
    </Window.Resources>  
    <!-- 窗口内容 -->  
</Window>
在WPF中使用静态资源的注意事项

在WPF(Windows Presentation Foundation)中,静态资源(StaticResource)的使用需要注意以下几个方面:

  1. 资源的加载时机

  • 加载时机:静态资源在XAML加载时解析,这意味着资源在应用程序启动时就被解析和分配。一旦分配,其值在应用程序的生命周期内保持不变,除非显式更改XAML或代码。

  1. 资源的不可变性

  • 不可变性:静态资源一旦被分配,其值就不能在运行时动态更改。如果需要资源值在运行时能够变化,应考虑使用动态资源(DynamicResource)。

  1. 适用范围

  • 全局与局部:静态资源可以在全局(如App.xaml中定义)或局部(如特定窗口或控件的资源中定义)范围内使用。全局定义的资源在整个应用程序中可用,而局部定义的资源则仅在定义它们的控件或窗口内部可用。

  1. 性能考虑

  • 性能优势:由于静态资源在XAML加载时即确定,因此它们在性能上通常优于动态资源。动态资源需要在每次访问时重新检索,这可能会降低性能,尤其是在资源值频繁变化或资源文件较大的情况下。

  1. 自定义控件与主题

  • 自定义控件与主题:当为自定义控件创建主题,并希望在主题中使用资源时,静态资源是必需的。因为静态资源的查找行为是可预测的,并且它们本身可以包含在主题中。

  1. 注意事项

  • 避免循环引用:在使用静态资源时,需要避免资源之间的循环引用,因为这会导致编译错误。

  • 资源键的唯一性:确保在同一资源字典中定义的资源键是唯一的,以避免冲突。

  • 一个小作业

    把第六节课中的样式整理到资源文件中,将正确执行出来效果


  • 点击关注不迷路,你们的关注是我们最大的动力

一下节课讲解动态资源的使用,这一张更重要。大家有一定要及时关注。周六晚上不见不散。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值