将scrollview添加到ListBox

时间:2014-09-24 16:47:32

标签: wpf xaml listbox

我正在与我的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>

修改

如果我在网格上设置了一个高度,它可以正常工作,但设置一个固定的高度不是一个选项,因为它不会为任何分辨率进行缩放。

2 个答案:

答案 0 :(得分:1)

滚动条不会显示,因为它不知道Height的父Grid,因为RowDefinitions被定义为Auto和{ {1}}。

如果您希望滚动条显示,则必须在*

中明确设置高度
Grid

答案 1 :(得分:0)

可替换地,

您可以使用DockPanel布局及其属性LastChildFill=True。然后,您还需要将属性DockPanel.Dock = [LOCATION]添加到每个元素(StackPanels和ListView)。由于您希望ListView占用剩余空间,因此请确保将其作为<DockPanel>中的最后一个孩子。