2

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

感谢您的任何提示!

4

2 回答 2

3

顾名思义,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到您的文本块以防它仍然太长。

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

于 2010-03-08T10:06:48.157 回答
0

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

于 2010-07-14T15:37:48.133 回答