【问题标题】:Are Brushes defined in WPF Style Setters instantiated every time the style is used?每次使用样式时都会实例化 WPF 样式设置器中定义的画笔吗?
【发布时间】:2016-08-09 17:37:05
【问题描述】:

请考虑以下 xaml 片段:

<Style x:Key="CustomBorderStyle" TargetType="Border">
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#CCC" Offset="0.45"/>
                <GradientStop Color="#444" Offset="0.8"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Style>

假设样式是在应用程序级资源字典中定义的。当控件引用样式时,WPF 是否每次都实例化 LinearGradientBrush 类的新实例?或者是否使用了LinearGradientBrush 的单个共享实例?

我想知道在别处定义LinearGradientBrush 是否更有效,然后在样式中将其作为静态资源引用。

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    该样式及其组成对象只有一个实例。

    【讨论】:

    • 谢谢。不过,您确定样式会自动冻结吗?它与msdn.microsoft.com/en-us/library/… 相矛盾,“为方便起见,可冻结对象保持未冻结状态,除非您明确冻结它们。”
    • @Oliver:确实,似乎不是这样。可能记错了曾经咬过我的东西(我尝试为最终被隐式冻结的东西制作动画,但我不记得所有细节)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2011-10-17
    • 2017-01-30
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多