У меня есть 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 -
-------------------
примечание: если это нужно задать другим вопросом, скажите мне, и я разделю вопросы