WPF 列表框不会垂直滚动

标签 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”)。

感谢您的任何提示!

最佳答案

顾名思义,ScrollViewer.Horizo​​ntalScrollBarVisibility="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/

相关文章:

c# - 当需要该类 WPF 的多个实例时,模型内部的 INotifyPropertyChanged

c# - 从数据库馈送的 ListBox 中获取 SelectedItems

c# - 如何检查一个项目是否已经在列表框中

image - 缩小图像以适合 ScrollViewer 尺寸

windows-phone-7 - 当内容高度 > 2000px 时 WP7 ScrollViewer Bug

wpf - 如何使 WPF DataGrid VerticalScrollBar 始终可见?

c# - 从任务管理器隐藏 WPF 应用程序 - 错误

c# - 从 Windows 按钮单击事件打开 WPF 应用程序

wpf - WPF 的 Fluent 设计工具包

php - 如何在 php(Laravel) 中使用动态列表框