WPF列表框不会滚动垂直

时间:2010-03-08 09:21:49

标签: wpf listbox scrollviewer

在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”)。

感谢任何提示!

2 个答案:

答案 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)

如果您想在列表框中进行垂直滚动,请不要将其放在堆叠面板中,而是使用网格。