.net 如何使用自定义项模板修复列表框的布局
我已将自定义ItemTemplate应用于ListBox控件,但布局有问题。当列表框滚动到底部并调整大小时,项目溢出: 如果我向上滚动,布局似乎最终得到了纠正: 如果我删除设置HorizontalContentAlignment的行,问题就会消失(但我希望列表项拉伸以填充可用空间) 任何帮助都将不胜感激.net 如何使用自定义项模板修复列表框的布局,.net,wpf,xaml,.net,Wpf,Xaml,我已将自定义ItemTemplate应用于ListBox控件,但布局有问题。当列表框滚动到底部并调整大小时,项目溢出: 如果我向上滚动,布局似乎最终得到了纠正: 如果我删除设置HorizontalContentAlignment的行,问题就会消失(但我希望列表项拉伸以填充可用空间) 任何帮助都将不胜感激 <ListBox x:Name="myList" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.
<ListBox x:Name="myList" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Visible">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Background="Lime" TextWrapping="Wrap" Text="{Binding Comments}"/>
<Grid Grid.Column="1" Background="Aqua">
<Button Width="20" Height="20" Content="..."/>
</Grid>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
列表框的默认ItemsPanel
是一个virtualzingstackpanel
,它很难处理拉伸对齐。相反,尝试只包含一列的UniformGrid
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
虽然您的建议似乎有效,但如果没有虚拟化,性能还不够好(我已经用多达10000个项目进行了测试)。一件有效的事情是向ListBox的SizeChanged事件添加一个事件处理程序,并调用myList.Items.Refresh()。虽然感觉没有必要这样做,但到目前为止,这是我遇到的最好的折衷方案,尽管它也存在性能问题(调整窗口大小时出现了一些明显的口吃)。