polegar da barra de rolagem da @listbox muda de tamanho quando o conteúdo tem altura variável

Eu tenho um ListBox com muitos objetos exibidos, cada um com altura variável, com base no número de valores que cada objeto possui. Veja minha pergunta anterior que foi respondida aqu

uitos objetos têm 5 linhas de altura, enquanto outros têm 1. A barra de rolagem no ListBox não parece assim, provavelmente devido à virtualização. Enquanto você navega, o polegar na barra de rolagem mudará de tamanho, com base na quantidade de itens que realmente se encaixam na caixa naquele momento atual. Isso torna o polegar muito grande às vezes e muito pequeno em outra

Como esse ListBox também está contido em um TabControl, quando você alterna de uma guia para outra, o ListBox costuma rolar para uma seção diferente quando você retornar a el

Alguma idéia de como resolver um problema como est

Informação adicional Desativar a virtualização corrige o problema de rolagem, embora ao custo de uma exibição inicial mais lenta. No entanto, o redimensionamento da ListBox com o conteúdo interno causa um grande atraso ao redimensionar horizontalmente (vertical é bom), o que suponho que seja devido à alteração da largura do meu modelo e à necessidade de redesenhar todos os elementos:

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

Isso é desenhar bordas em torno das bordas dos campos para criar um agrupamento visual, onde val se estenderá ao tamanho do conteúdo. A caixa de listagem também possui HorizontalContentAlignmment = Stretch para garantir que isso pareça correto.

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

note: se isso precisar ser feito em uma pergunta diferente, diga-me e eu separarei as perguntas

questionAnswers(6)

yourAnswerToTheQuestion