滚动查看器中的ListBox或其他项控件

滚动查看器中的ListBox或其他项控件

问题描述:

我们有一个包含各种元素和数据网格的表单。当列表框包含在滚动查看器中时,当我们增加窗口的大小时,一切正常。当窗口大小减小时,列表框保持相同高度,并且垂直滚动条变为活动状态。如果您摆脱列表框上的高度绑定,列表框会达到其所需的最大高度。如果我们没有列出所有边框的行为,就像我们想要的那样。滚动查看器中的ListBox或其他项控件

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

<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时的边框相同?

我不知道你想在这里做什么,但如果你想在列表框,以减少它的高度时,窗口的高度,然后降低,你必须保证金添加到边境所以它就像

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

注意:

这将使列表框高度降低,但它可能会激活列表框的内滚动,所以你会看到两个滚动条。

另一个

注意,您还可以删除高度=“*”第一rowdefinition的,因此将有网格高度的其余部分。

+0

即使边距设置为0.1,此解决方案仍然可以工作。你有解释为什么这有效吗? – 2010-07-29 23:02:07

+0

犯错,我真的很抱歉,但我也不知道它是如何工作在你的情况。这是我在网上发现的一个黑客,当我试图阻止文本框增长时,即使未设置宽度。试图再次找到链接,似乎是这个网站也笑 http://*.com/questions/386039/ – dnr3 2010-07-30 05:33:08

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

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

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