在ScrollViewer和网格中使用多个扩展器进行抖动或慢速滚动

时间:2011-05-06 12:55:52

标签: wpf grid scrollviewer expander performance

在我们的几个应用程序中,我们通常需要在屏幕上一起显示大量数据,但将此内容放在扩展器中,以便用户可以确定他们当时想要看到或不想看到的内容。

我注意到,当我尝试使用下面类似的代码时,滚动要么是跳跃,要么比它应该的速度慢,在一台不错的机器上也是如此。

<ScrollViewer x:Name="sbar" Grid.Row="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" VerticalAlignment="Top">
     <Grid>
          <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>

<Expander x:Name="ex1" Style="{DynamicResource GroupBoxExpander}" Width="900" HorizontalAlignment="Left" Margin="5" Grid.Row="0" Grid.Column="0" IsExpanded="True">
     <StackPanel></StackPanel>
</Expander>

<!-- in my current application, 9 more in between -->

<Expander x:Name="ex11" Style="{DynamicResource GroupBoxExpander}" Width="900" HorizontalAlignment="Left" Margin="5" Grid.Row="0" Grid.Column="0" IsExpanded="True">
     <StackPanel></StackPanel>
</Expander>
        </Grid>
    </ScrollViewer>

在这个例子中,我实际上不再需要使用网格了,但是我们的其他应用程序仍然需要一个网格。所有扩展器中都有内容,从文本框到列表视图和其他控件,但不是很多,有些范围很大。

我们可以做些什么来加快这一点?它背后的幕后真的没有太多的数据绑定,我们不会

2 个答案:

答案 0 :(得分:0)

从网格中删除不必要的行并尝试一下。

答案 1 :(得分:0)

我删除了许多额外的东西(比如Grids和一些没有使用的堆栈面板),并没有真正看到性能提升。但我注意到,在这些代码最终会运行的机器上(使用较低分辨率的显示器),性能要好得多。这个问题与屏幕上可用的可视项目以及当前问题中的边缘案例相关。

因此,我认为最好的答案是重新设计界面,用户体验是前往这里的最佳途径。