ScrollViewer中的ListBox或其他项控件

时间:2010-07-29 08:28:28

标签: wpf listbox scrollviewer

我们有一个包含各种元素和数据网格的表单。当列表框包含在滚动查看器中时,当我们增加窗口大小时,一切都很好。当窗口大小减小时,列表框保持相同的高度,垂直滚动条变为活动状态。如果删除列表框中的高度绑定,列表框将达到其所需的最大高度。如果我们没有一个列表框,那么边框的行为就像我们想要的那样。

我们可以使用以下代码模拟我们的问题。

<Window
   x:Class="WpfApplication1.MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="MainWindow"
   Height="150"
   Width="525">

   <Grid
      Margin="10">

      <ScrollViewer>
         <Grid>
            <Grid.RowDefinitions>
               <RowDefinition
                  Height="*" />
               <RowDefinition
                  Height="Auto" />
            </Grid.RowDefinitions>

            <Border
               x:Name="border"
               MinHeight="40" />

            <ListBox
               Height="{Binding ElementName=border, Path=ActualHeight}">
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
               <ListBoxItem>Item 1</ListBoxItem>
            </ListBox>

            <ToolBar
               Grid.Row="1">
               <Button
                  Content="Add" />
            </ToolBar>
         </Grid>

      </ScrollViewer>
   </Grid>
</Window>

如果没有ListBox,我们如何让ListBox以与边框相同的方式调整大小?

2 个答案:

答案 0 :(得分:1)

不是100%肯定你在找什么,但我认为

<ListBox HorizontalAlignment="Stretch"
         VerticalAlignment="Stretch">

可能就是您所需要的。它会缩小列表框,直到达到最小尺寸(显示所有项目),然后激活滚动条。

答案 1 :(得分:1)

我不确定你在这里要做什么,但是如果你希望列表框在窗口高度减小时减小它的高度,那么你必须将边距添加到边框所以它就像

        <Border
           Margin="5"
           x:Name="border"
           MinHeight="40" />

注意:

这将使列表框高度降低但是它可能会激活列表框的内部滚动,因此您将看到两个滚动条。

在另一个注释上你也可以删除第一行定义的height =“*”,这样就可以得到网格高度的其余部分。