我正在与我的XAML挣扎!我有3行,除了中间行之外,它们并没有真正改变页面的高度。中间行有一个ListBox。
根据屏幕的大小,我希望第二行的高度随着项目添加到ListBox而变大,除非它将第三行推出屏幕。在这种情况下,我希望ListBox显示滚动条。我不确定如何实现这一目标。
我的研究表明,对于高度,我们有自动和* - 自动将根据控件的大小,*将填补整个差距。我无法看到其中任何一个真正符合我的需要......
以下是UserControl的代码。此UserControl在父项TabControl中呈现。
我的努力是
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<TextBlock Text="[?] Source directory" />
</StackPanel>
<ListView ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding Folders}" Grid.Row="1" >
<ListBox.ItemTemplate>
<DataTemplate>
//data template code
</DataTemplate>
</ListBox.ItemTemplate>
</ListView>
<StackPanel Grid.Row="2">
<Button Content="Save" />
</StackPanel>
</Grid>
修改
如果我在网格上设置了一个高度,它可以正常工作,但设置一个固定的高度不是一个选项,因为它不会为任何分辨率进行缩放。
答案 0 :(得分:1)
滚动条不会显示,因为它不知道Height
的父Grid
,因为RowDefinitions
被定义为Auto
和{ {1}}。
如果您希望滚动条显示,则必须在*
Grid
答案 1 :(得分:0)
可替换地,
您可以使用DockPanel布局及其属性LastChildFill=True
。然后,您还需要将属性DockPanel.Dock
= [LOCATION]添加到每个元素(StackPanels和ListView)。由于您希望ListView占用剩余空间,因此请确保将其作为<DockPanel>
中的最后一个孩子。