滚动查看器中的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的,因此将有网格高度的其余部分。
答
不是100%肯定你正在寻找什么,但我认为
<ListBox HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
可能是你所需要的。它会缩小列表框直到达到最小尺寸(显示所有项目),然后激活滚动条。
即使边距设置为0.1,此解决方案仍然可以工作。你有解释为什么这有效吗? – 2010-07-29 23:02:07
犯错,我真的很抱歉,但我也不知道它是如何工作在你的情况。这是我在网上发现的一个黑客,当我试图阻止文本框增长时,即使未设置宽度。试图再次找到链接,似乎是这个网站也笑 http://stackoverflow.com/questions/386039/ – dnr3 2010-07-30 05:33:08