我有一个 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 - - ------------- - - 选择 - 验证 - - ------------- - - 选择 - 验证 - ------------------
注意:如果需要在不同的问题中提出这个问题,请告诉我,我会分开问题