带有ScrollBars的WPF XAML ListView

时间:2016-05-26 15:25:27

标签: wpf xaml listview scrollbar

我有一个显示两个滚动条的ListView。为了达到这个目的,我将ListView放在一个位于Grid中的Border中,如下所示:

<Window ...
    MinWidth="600" MinHeight="500" Width="800" Height="500"
    Topmost="True"
    WindowStartupLocation="CenterScreen" 
    SizeToContent="Height" WindowStyle="None">

    <Window.Resources>
        <ResourceDictionary>
            ...
        </ResourceDictionary>
    </Window.Resources>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*" MinHeight="60"/>
            <RowDefinition Height="48"/>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="10"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Row="1">
            <Grid.RowDefinitions>
                <RowDefinition Height="32"/>
                <RowDefinition Height="370"/>  <-- THIS IS HARDCODED TO 370 BUT I NEED IT TO BE RESIZABLE
            </Grid.RowDefinitions>

            <Grid Margin="5,0,0,0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="4"/>
                    <ColumnDefinition Width="346*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding MyName}" Grid.Column="1"
                       Style="{StaticResource MyNameStyle}" Margin="0,5,0,5" />

            </Grid>

            <Border BorderBrush="{StaticResource MyBrush}" Grid.Row="1" Grid.Column="0" >
                <ListView
                    x:Name="lstMyListView" 
                    Margin="0,0,0,0"
                    BorderBrush="Transparent"
                    ItemsSource="{Binding MyItems}" 
                    SelectedIndex="0"
                    ScrollViewer.CanContentScroll="True"
                    ScrollViewer.VerticalScrollBarVisibility="Auto">
                  ...
                  ...
                </ListView>
              ...
              ...
            </Border>
            ...
            ...
        </Grid>
    </Grid>
</Window>

这是一个可调整大小的形式。因此,ListView也应该调整大小,但只有在用户调整表单大小时才应该这样做。上面我的硬编码值的问题很明显,ListView不会调整大小但保持恒定高度= 370。

我知道我可以将其设置为370 *但在这种情况下,我的列表将调整大小以适合所有项目。我想限制它,以便仅在用户调整表单大小时才会调整大小。因此,如果有更多项目,ListView应显示滚动条,并且当​​用户调整表单大小时,如果将表单调整为可容纳ListView中所有项目的高度,则该滚动条应该消失。

更新 我没有将高度硬编码到370以上,而是尝试将高度设置为,Auto和370 。所有这些都将扩展ListView(因此也形成)以容纳ListView中的所有项目。

更新2: 更新了XAML以显示整个树结构。

更新3: 根据Rachel的建议,在XAML上面的注释行中将硬编码370设置为“*”,并生成调整大小的表单,以便ListView适合其中的所有项目。我添加了截图,显示了打开时的表单以及显示打开时应该如何显示的截图。正如你所看到的,它可以调整大小以适应所有这些。

我需要的是表单和ListView保持其设置大小并仅在用户调整表单大小时调整大小。

enter image description here

3 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题,你就是说表单加载的大小太大,因为ListView正在增长到它的全高。如果是这种情况,请从SizeToContent="Height"标记中移除<Window>,因为它使窗口的初始高度等于内容的任何高度,其中包括完整大小ListView

答案 1 :(得分:1)

通过设置 ScrollViewer.VerticalScrollBarVisibility="Visible" & MaxHeight="700" 滚动条将可见 MaxHeight 为任意值

答案 2 :(得分:0)

嗨,我想我已经了解你了。所以,我正在努力:

因此,您希望 ListView 至少高度为370,然后只有调整大小,如果窗口 调整大小窗口大小的增量和减量)。

  

设置第二行定义的MinHeight可以提供帮助

NSPredicate(format: "kategorie == %d", kategorie.katid?.intValue ?? 0)

谢谢。