在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”)。
感谢任何提示!
答案 0 :(得分:3)
顾名思义,ScrollViewer.HorizontalScrollBarVisibility="Disabled"
禁用水平滚动。如果你这样做,但你的ListBoxItems太长了,它们就会被切断。 StackPanel不会增长或缩小以适应ListBox,即使你将TextWrapping
添加到TextBlock,它也不会“包裹”你的项目以适应ListBox(如果它太窄)。这很顽固。我认为你的主要问题是StackPanel。
尝试使用具有如下定义的2列的网格而不是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
添加到您的文本块,以防它仍然太长。
已编辑:添加了更完整的代码示例并略微更改了我的回答。
答案 1 :(得分:0)
如果您想在列表框中进行垂直滚动,请不要将其放在堆叠面板中,而是使用网格。