3

在没有时间自己完全测试的情况下,我希望其他人可能已经知道使用控件的属性与样式定义控件的外观是否有任何性能和/或内存优势(反之亦然)。

选项1:

<Border Background="White" BorderBrush="Black" BorderThickness="2" CornerRadius="20">
    ...
</Border>

选项#2:

<Style x:Key="BorderStyle" TargetType="Border">
    <Setter Property="Background" Value="White"/>
    <Setter Property="BorderBrush" Value="Black"/>
    <Setter Property="BorderThickness" Value="2"/>
    <Setter Property="CornerRadius" Value="20"/>
</Style>

<Border Style="{StaticResource BorderStyle}">
    ...
</Border>

请注意,我不是在询问可重用性,因为我了解这些好处。我特别想知道特定于给定控件且未重用的“一次性”样式。

另一个例子是我有第二个带边距的边框。让 Border 使用与上述相同的样式并直接设置 Margin 属性会更高性能并且需要更少的内存,还是我应该使用新的设置器基于第一个 Style 资源创建第二个 Style 资源?

4

2 回答 2

0

我知道它的优先级列表,但没有我在评论中写的那么多。以下是注释中关于此优先级列表的内容Matthew MacDonald book [Chapter 4. Dependency Property]

在此处输入图像描述

因此,当您在本地设置值时,会为该值分配内存。当您在Style和其他使用的控件中设置这些值时,Style内存仅分配一次,通过存储 的值Style

我认为,如果控件不是很多(模糊的概念,可以是1、2或3),速度实际上是没有区别的,但是如果设置了控件,在这种情况下,速度和内存的区别存储将。

于 2013-08-24T12:31:58.627 回答
0

如果对仅在一个地方使用的一组属性使用 Style 语法,则不会提高内存效率,但确实获得了代码可读性;您的主要 XAML 代码将不那么混乱。我从来没有感觉到使用资源字典样式和本地定义的依赖属性之间的执行速度差异。

对于您的第二个问题,同样没有明显的速度差异,但是您可以通过指定本地属性来覆盖任何资源字典属性。以这种方式使用样式涉及的内存效率非常小。

于 2013-08-24T15:03:40.880 回答