代码之家  ›  专栏  ›  技术社区  ›  HCL

使用ColumnSpan的WPF布局性能惩罚

  •  0
  • HCL  · 技术社区  · 14 年前

    我有一个类似于下面所示的简化示例的网格。网格中有更多的元素,但问题在于ListBox和TextBlock。

    如果TextBlock(或具有相同网格配置的任何其他元素)的列跨度为2,则对ListBox项的每次更新都非常慢。我用穿孔机和视觉遥控器看了一下,但看不到什么特别的东西。如果我将第二个ColumnDefinition设置为固定宽度,则所有操作都会按需要进行。如果我将第一行高度设置为固定高度,也会发生同样的情况。

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
    
        <TextBlock Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2">The column-span of this TextBlock seems to lead to an refresh-problem</TextBlock>
        <ListBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding}"></ListBox>                
    </Grid>
    

    1 回复  |  直到 14 年前
        1
  •  1
  •   Goblin    14 年前

    问题是listbox会创建列表中的所有可视元素,以确定GridColumn的宽度设置为Auto之后,哪个是最宽的。如果您的列表包含许多项或者有一个复杂(繁重)的ItemTemplate,那么您就有麻烦了。

    通常,ListBox只为可见元素创建可视元素(这是通过ItemsPanelTemplate中的virtualzingstackpanel完成的)。