当前位置 博文首页 > 文章内容

    WPF中的StaticResource和DynamicResource有什么区别

    作者:shunshunshun18 栏目:未分类 时间:2021-12-28 18:32:09

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    StaticResource 是静态资源

    DynamicResource是动态资源

    用一下例子说明

    <Window.Resources>
            <Style x:Key="BorderStyle" TargetType="{x:Type Border}">
                <Setter Property="BorderThickness" Value="5" />
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Blue" />
                        <Setter Property="BorderBrush" Value="Red" />
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="False">
                        <Setter Property="Background" Value="Red" />
                        <Setter Property="BorderBrush" Value="Blue" />
                    </Trigger>
                </Style.Triggers>
            </Style>
            <Style x:Key="TextBlockStyle" TargetType="{x:Type TextBlock}">
                <Setter Property="FontFamily" Value="宋体" />
                <Setter Property="FontSize" Value="18" />
                <Setter Property="Foreground" Value="Red" />
                <Setter Property="FontWeight" Value="Bold" />
            </Style>
        </Window.Resources>
        <Grid>
            <Border
                Width="100"
                Height="100"
                Style="{DynamicResource BorderStyle}" />
            <TextBlock
                HorizontalAlignment="Center"
                VerticalAlignment="Top"
                Style="{StaticResource TextBlockStyle}"
                Text="TEXT1" />
        </Grid>

     

    我的理解而言:

     Border的样式是用动态资源获取的 ,因为它用到了触发器,会变化数据,所以需要用DynamicResource来获取样式。

    TextBlock是用静态资源获取,因为它只获取样式内容无变化数据。所以用StaticResource来获取。

    TextBlock也可以使用DynamicResource来获取样式 但是它会多次调用,会占许些资源,当量大的时候会让程序变慢,所以要合理使用。

    Border如果使用StaticResource来获取样式,将会收到错误提示:“StaticResource reference 'BorderStyle' was not found.” 原因是StaticResource 查询行为不支持向后引用,即不能引用在引用点之后才定义的资源。而DynamicResource可以向后引用,即DynamicResource运行时才查找并加载所定义的资源。

    网上有各个大佬精细的说明,我就简单总结下:

    StaticResources时

    要在资源第一次引用之后无需再修改资源的值。

    DynamicResource时

    资源的值依赖一些条件,而该条件直到运行时才能确定。

    限制条件:属性必须是依赖属性,或是Freezable的。

    详细的可参考大佬这编文章:(18条消息) WPF教程(五)资源(StaticResource 静态资源、DynamicResource 动态资源)_鱼骨头科技-CSDN博客_wpf 动态资源

    bkbky