Большой палец полосы прокрутки списка меняет размер, когда содержимое переменной высоты

У меня есть ListBox с множеством отображаемых объектов, каждый из которых может иметь переменную высоту, в зависимости от количества значений каждого объекта.Смотрите мой предыдущий вопрос, на который был дан ответ здесь.

Многие объекты имеют высоту в 5 строк, а другие - 1. Полоса прокрутки в ListBox не выглядит так, вероятно, из-за виртуализации. Пока вы прокручиваете,большой палец на полосе прокрутки изменит свой размерна основе того, сколько предметов на самом деле помещается в коробку в данный момент. Это иногда делает большой палец большим, а иногда очень маленьким.

Поскольку этот ListBox также содержится в TabControl, при переключении с одной вкладки на другую ListBox часто прокручивается в другой раздел, когда вы возвращаетесь к нему.

Любые идеи, как решить проблему, как это?

Дополнительная информация: Отключение виртуализации устраняет проблему с прокруткой, но за счет более медленного начального отображения. Однако изменение размера ListBox с содержимым внутри приводит к некоторой большой задержке при изменении размера по горизонтали (по вертикали это нормально), что, как я полагаю, связано с изменением ширины моего шаблона и требует перерисовки для каждого элемента:

<DataTemplate DataType="{x:Type xmlset:Variable}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="170"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Border BorderThickness="1,0,0,1" BorderBrush="Black">
            <TextBlock Margin="2,2,0,2"  Text="{Binding Path=Identifier.Name, Mode=OneWay}"/>
        </Border>
        <ItemsControl IsTabStop="False" Grid.Column="1" ItemsSource="{Binding Path=Values, Mode=OneWay}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="120"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>

                        <Border Grid.Column="0" BorderThickness="1,0,0,1" BorderBrush="Black">
                            <TextBlock Margin="2,2,0,2" Text="{Binding Path=Optimization, Mode=OneWay}"/>
                        </Border>
                        <Border Grid.Column="1" Width="Auto" BorderThickness="1,0,1,1" BorderBrush="Black">
                            <TextBox Margin="0,2,0,2" BorderThickness="0" Text="{Binding Path=Value}" TextChanged="TextBox_TextChanged"/>
                        </Border>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
</DataTemplate>

Это рисование границ по краям полей для создания визуальной группировки, где val будет растягиваться до размера содержимого. У списка также есть HorizontalContentAlignmment = Stretch, чтобы гарантировать, что это выглядит правильным.

-------------------
- var - opt - val -
-     -------------
-     - opt - val -
-     -------------
-     - opt - val -
-------------------

примечание: если это нужно задать другим вопросом, скажите мне, и я разделю вопросы

Ответы на вопрос(3)

Ваш ответ на вопрос