【问题标题】:Static resource DataTemplate vs. inline DataTemplate静态资源 DataTemplate 与内联 DataTemplate
【发布时间】:2018-02-16 14:43:23
【问题描述】:
  1. 假设我有一个CellContentTemplateDataGrid 中的一列),我定义了它的 DataTemplate 内联:

    <Column.CellContentTemplate>
        <DataTemplate>
    
        </DataTemplate> 
    </Column.CellContentTemplate>
    

与将StaticResource 引用到预定义的DataTemplate 相比,内存使用方面是否存在差异? 在DataTemplate的所有内容被复制之后。

  1. 假设这个DataTemplateTextBlock 和“绿色”的Foreground。如果我通过StaticResource 引用DataTemplate,这个“绿色”画笔会逐行重复使用还是被复制?

【问题讨论】:

    标签: wpf wpfdatagrid datatemplate


    【解决方案1】:

    DataTemplate 本身只会创建一次,无论您将其创建为可重用资源还是内联资源。因此,除非您创建 DataGrid 的另一个实例,否则内存使用方面没有区别。然后将创建另一个内联DataTemplate 的实例。

    假设这个DataTemplateTextBlockForeground 的“绿色”。如果我通过StaticResource 引用DataTemplate,这个“绿色”画笔会逐行重复使用还是被复制?

    您在 XAML 标记中定义的字符串“Green”被解析为 Brushes.Green,这是 Brushes 类的静态属性,每次都返回相同的缓存和冻结画笔。

    【讨论】:

    • 假设我有一个内联 LinearGradientBrush 作为这个文本块的前景,而不是这个绿色。我想现在会有所不同。
    • 然后会有一个为每个TextBlock创建的LinearGradientBrush实例。
    • 如果我获得了虚拟化,这些画笔的数量将与出现的项目数量一样......
    • 是的,每个可见单元格或多或少都会获得一个 TextBlock 实例。
    猜你喜欢
    • 2014-04-10
    • 1970-01-01
    • 2011-07-21
    • 2011-08-16
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多