UWP C# - Listview中的网格问题

时间:2017-04-13 15:51:59

标签: c# xaml uwp

我正在用C#为Windows 10编写一个小应用程序,我有一个如下所示的列表视图,它已经在网格中。

然而,我添加到listview的网格没有扩展以填充空间,它只是增长到与绑定到它的字段中包含的数据的长度一样宽。我究竟做错了什么?我不想使用固定字段,我更喜欢使用页面宽度的相对比例。

帮助!

<Grid x:Name="RootGrid" Margin="5" >
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="FolderMate" Style="{StaticResource SampleHeaderTextStyle}"/>

        <Button x:Name="GetFilesAndFoldersButton" 
                Grid.Row="1"
                Grid.Column="0"
                Content="Get files and folders" 
                Click="GetFilesAndFoldersButton_Click" 
                Margin="0,10,0,10"/>
        <TextBlock x:Name="FileInfo"
                Grid.Row="1"
                Grid.Column="1"
                Grid.ColumnSpan="3"                      
                VerticalAlignment="Center" 
                Margin="10" 
                Foreground="Green"/>
        <Button x:Name="ResetButton"
                Grid.Row="1"
                Grid.Column="5"
                Content="reset"
                HorizontalAlignment="Right"
                Click="ResetButton_Click" 
                Margin="0,10,10,0"/>

        <!--<ScrollViewer VerticalScrollMode="Auto" 
                      VerticalScrollBarVisibility="Auto" 
                      Grid.Row="2"
                      Grid.ColumnSpan="5"
                      BorderBrush="Black"
                      BorderThickness="2"
                      Background="Chartreuse" 
                      Margin="0,5,0,5">-->
            <ListView x:Name="ThisList" 
                      Grid.Row="2"
                      Grid.ColumnSpan="5"
                      Background="LightBlue"
                      Margin="5"
                      IsItemClickEnabled="True"  
                      ItemClick="ThisList_ItemClick">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid BorderThickness="1" BorderBrush="Red" >
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*" />
                            </Grid.RowDefinitions>

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

                            <Border Background="Aquamarine" Grid.Column="0">
                                <SymbolIcon Symbol="Folder" HorizontalAlignment="Center" Margin="15 0"/>
                            </Border>
                            <Border Background="Yellow" Grid.Column="1">
                                <TextBlock Text="{Binding FName}" Margin="10" />
                            </Border>
                            <Border Background="Cyan" Grid.Column="2">
                                <TextBlock Text="{Binding FTime}" Margin="10"/>
                            </Border>
                            <Border Background="Tomato" Grid.Column="3">
                                <TextBlock Text="{Binding FSize}" HorizontalAlignment="Right" Margin="10"/>
                            </Border>
                        </Grid>

                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        <!--</ScrollViewer>-->
    </Grid>

2 个答案:

答案 0 :(得分:2)

您需要将HorizontalContentAlignment ListView.ItemContainerStyle内的ListViewItem设置为Stretch

ListView的完整XAML如下所示。

<ListView x:Name="ThisList" 
              Grid.Row="2"
              Grid.ColumnSpan="5"
              Background="LightBlue"
              Margin="5"
              ItemsSource="{Binding data}"
              IsItemClickEnabled="True"  
              ItemClick="ThisList_ItemClick">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid BorderThickness="1" BorderBrush="Red" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>

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

                <Border Background="Aquamarine" Grid.Column="0">
                    <SymbolIcon Symbol="Folder" HorizontalAlignment="Center" Margin="15 0"/>
                </Border>
                <Border Background="Yellow" Grid.Column="1">
                    <TextBlock Text="{Binding FName}" Margin="10" />
                </Border>
                <Border Background="Cyan" Grid.Column="2">
                    <TextBlock Text="{Binding FTime}" Margin="10"/>
                </Border>
                <Border Background="Tomato" Grid.Column="3">
                    <TextBlock Text="{Binding FSize}" HorizontalAlignment="Right" Margin="10"/>
                </Border>
            </Grid>

        </DataTemplate>
    </ListView.ItemTemplate>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

最后,请参阅我如何添加ItemContainerStyle仅定位ListViewItem

最终输出将是

enter image description here

祝你好运。

答案 1 :(得分:0)

它可能会对你有所帮助。我曾经那样使用过 -

<ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto">
                            <StackPanel>
                                <ListView x:Name="UserMessageList">
                                    <ListView.ItemTemplate>
                                        <DataTemplate x:DataType="local1:MessageModel">
                                            <StackPanel>

                                                //Add your conrole

                                            </StackPanel>

                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>
                            </StackPanel>
                        </ScrollViewer>