在 Groupbox 中,我有一个 Listbox,ListboxItems 也在 XAML 中定义。列表框定义:
<ListBox Name="lvAvoidCountry" Margin="5,5,5,5"
Background="Transparent"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" >
项目定义如下:
<ListViewItem >
<CheckBox Name="chkAlbanien" Tag="55">
<StackPanel Orientation="Horizontal">
<Image Source="images/flag_albania.png" Height="30"></Image>
<TextBlock Text="Albanien" Margin="5,0,0,0"></TextBlock>
</StackPanel>
</CheckBox>
</ListViewItem>
如果我删除 Scrollviewer 设置,我会得到水平滚动,并且项目格式良好 - 宽度正确。如果我使用滚动查看器设置,项目会被切断,以便所有项目都放置在列表框中。 (例如,显示了标志,显示了复选框,但文本只是“Alba”)。
感谢您的任何提示!
最佳答案
顾名思义,ScrollViewer.HorizontalScrollBarVisibility="Disabled"
禁用水平滚动。如果您这样做,但您的 ListBoxItems 太长,它们将被截断。 StackPanel 不会增大或缩小以适合 ListBox,并且如果列表框太窄,它也不会“包裹”您的项目以适合 ListBox,即使您将 TextWrapping
添加到 TextBlock 也是如此。它非常顽固。我认为你的主要问题是 StackPanel。
尝试使用具有 2 列定义的 Grid,而不是 StackPanel,如下所示:
<ListViewItem >
<CheckBox Name="chkAlbanien" Tag="55">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="images/flag_albania.png" Height="30"/>
<TextBlock Grid.Column="1"
TextWrapping="Wrap"
Text="Albanien" Margin="5,0,0,0"/>
</Grid>
</CheckBox>
</ListViewItem>
Auto
将“收缩”图像列,而 *
将为文本提供所有剩余空间。然后将 TextWrapping
添加到文本 block ,以防它仍然太长。
编辑:添加了更完整的代码示例并稍微更改了我的答案。
关于WPF 列表框不会垂直滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2400273/