WPF列表框不会滚动垂直

问题描述:

在一个Groupbox内我有一个Listbox,ListboxItems也在XAML中定义。 ListBox中的定义:WPF列表框不会滚动垂直

<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设置我得到的水平滚动和项目很好格式化 - 正确的宽度。如果使用滚动查看器设置,项目会被切断,以便所有项目都放在列表框中。 (例如显示标志,显示复选框,但文本只是“阿尔巴”)。

感谢您的任何提示!

+0

你想达到什么目的?如果将水平滚动条可见性设置为禁用,这似乎是正常结果。或者我错过了什么? – Timores 2010-03-08 09:38:48

+0

我想垂直滚动。 – JerryVienna 2010-03-24 11:34:38

顾名思义,ScrollViewer.HorizontalScrollBarVisibility="Disabled"禁用水平滚动。如果你这样做,但你的ListBoxItems太长,它们会被切断。 StackPanel不会增长或缩小以适应ListBox,并且如果它太窄,它将不会“包裹”您的项目以适合ListBox,即使您将TextWrapping添加到TextBlock。它非常固执。我认为你的主要问题是StackPanel。

而是一个StackPanel的,请尝试使用一个网格,象这样定义的2列:

<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添加到您的文本块中,以防过长。

编辑:增加了更完整的代码示例,并稍微改变了我的答案。

+0

嗨,谢谢你的回答 - 我想让列表框看起来像 | ================================ | | x 1 x 2 x 3 x 4 x 5 | | x 6 x 7 x 8 x 9 x 10 | 但目前它“水平向右”画出“x 6和x 7” - 在视线之外,并以“x 8”开始下一行。 我希望它只使用可见宽度“绘制”的项目,并允许它垂直滚动,... 我想用ColumDefinitions我只会得到一个项目的列,... – JerryVienna 2010-03-08 10:45:23

+0

所以你不想要每行一列listboxitem,垂直堆叠...你想listboxitems水平排列,所以他们“流动”像文本? (对不起,我很难想象你想要什么,如果你能绘制图表并将它添加到你的问题中,可能会有帮助。) – 2010-03-08 12:07:47

如果你想在列表框中垂直滚动,那么不要把它放在一个堆栈面板中,而应该使用网格。