UWP:无法使ListView可滚动

时间:2017-12-09 13:46:05

标签: c# listview uwp scrollbar vertical-scrolling

我有一个简单网格(2x2)的页面。在左下角的一个网格中是另一个网格,此网格内部是绑定到集合的ListView。可以将条目添加到集合中,以便ListView的高度增加(ListView的高度设置为auto,以便使用所有可用空间)。

我想要的是,如果使用了所有可用空间(从屏幕高度开始),ListView的滚动条应该出现并且应该可用。有趣(不完整)的事情是:滚动条确实出现但我无法使用它们,我无法使用当我悬停ListView时出现的垂直滚动条滚动ListView。

当我将ListView的高度设置为固定值时,它可以工作,但我不希望这样,因为它不会使用屏幕上的所有可用空间。

这是页面的XAML(为了演示目的我删除了一些部分):

<Page
    x:Class="Qooli.TimeTracker.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Qooli.TimeTracker"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Page.Resources>
        ...
    </Page.Resources>

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>


        <StackPanel Name="spAddEntry" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="30">
            <TextBlock Text="Add new entry:" Name="lblAddNewEntry" />
            ...
        </StackPanel>

        <StackPanel Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="30">
            <TextBlock Text="Allocated time:" Name="lblAllocatedTime" />
            ...
        </StackPanel>

        <Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" Margin="30">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <TextBlock Text="Daily overview:" Name="lblDailyOverview" Grid.Row="0" Grid.Column="0" />
            <ListView Name="lvTimeEntries"  Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left"
                      Height="Auto"
                      MinHeight="100"
                      VerticalAlignment="Top"
                      MinWidth="300"
                      SelectionMode="Single"
                      ItemsSource="{x:Bind ViewModel.TimeEntriesAdvancedCollectionView, Mode=OneWay}"
                      ScrollViewer.VerticalScrollBarVisibility="Visible"
                      ScrollViewer.IsVerticalRailEnabled="True"
                      ScrollViewer.VerticalScrollMode="Enabled">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel></StackPanel>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate x:DataType="local:TimeEntry">
                        <Grid Background="{Binding Type, Converter={StaticResource TimeEntryTypeColorConverter}}" Padding="5">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="200"></RowDefinition>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="{x:Bind Time, Mode=OneWay}" Style="{StaticResource TitleTextBlockStyle}"
                                       MinWidth="60"
                                       MaxWidth="60"
                                       Grid.Row="0" Grid.Column="0">
                            </TextBlock>
                            <TextBlock Text="{x:Bind Title, Mode=OneWay}" Style="{StaticResource BodyTextBlockStyle}" Margin="5,0,0,0"
                                       MinWidth="100"
                                       MaxWidth="100"
                                       Grid.Row="0" Grid.Column="1">
                            </TextBlock>
                            <Button Name="btnEditTimeEntry" Grid.Row="0" Grid.Column="2" Margin="5,5,5,5">
                                <SymbolIcon x:Name="edit" Symbol="Edit"/>
                            </Button>
                            <Button Name="btnDeleteTimeEntry" Grid.Row="0" Grid.Column="3" Margin="5,5,5,5">
                                <SymbolIcon x:Name="delete" Symbol="Delete"/>
                            </Button>
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ListView>
        </Grid>

        <StackPanel Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="30">
            <TextBlock Style="{StaticResource summaryTextStyle}" Text="Start time:" Name="lblDayStartTime" />
            ...
        </StackPanel>

    </Grid>
</Page>

有人能说出为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您需要为两个网格将第二行的高度设置为"*"