Неустойчивая или медленная прокрутка с несколькими расширителями в ScrollViewer и Grid

#wpf #grid #scrollviewer #expander #performance

#wpf #сетка #scrollviewer #расширитель #Производительность

Вопрос:

В паре наших приложений нам обычно требуется отображать на экране большое количество данных вместе, но помещать это содержимое в расширители, чтобы пользователь мог определить, что он хочет видеть или не хочет видеть в данный момент.

Я заметил, что когда я пытаюсь использовать аналогичный приведенный ниже код, прокрутка либо скачкообразная, либо просто медленнее, чем должна быть, и на приличной машине тоже.

 <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>
  

В этом примере мне на самом деле больше не нужно так часто использовать сетку, но одному из наших других приложений все равно понадобится сетка. Также во всех расширителях есть содержимое, начиная от текстовых полей и заканчивая listviews и другими элементами управления, но их немного, а некоторые сильно варьируются.

Что мы могли бы сделать, чтобы немного ускорить это? На самом деле за кулисами происходит не так много привязки к данным, и мы не

Ответ №1:

удалите ненужные строки из grid и попробуйте это.

Комментарии:

1. Я удалил сетку в ходе некоторого тестирования, и это не имеет значения.

2. посмотрите реализацию вашего стиля для Scroll Viewer. Если это стандартно, то загрузка происходит из-за внутреннего содержимого, о котором вам нужно позаботиться.

3. Режим прокрутки не имеет привязанного к нему стиля. Расширители работают, но не уверен, что вы подразумеваете под «стандартным».

Ответ №2:

Я удалил как можно больше лишних вещей (например, сетки и некоторые неиспользуемые панели стека), и на самом деле не увидел увеличения производительности. Однако я заметил, что на машинах, на которых в конечном итоге будет выполняться этот код (с использованием монитора с более низким разрешением), производительность была намного лучше. Похоже, что эта проблема связана с визуальными элементами, доступными на экране, и крайним случаем в моей текущей проблеме.

Поэтому я думаю, что лучший ответ — перепроектировать интерфейс, и пользовательский интерфейс — лучший путь для этого.