【问题标题】:WPF Listview overflowWPF 列表视图溢出
【发布时间】:2017-11-16 01:15:12
【问题描述】:

如何阻止我的列表视图控件溢出?

添加项目时:

列表视图应该停在红色标记处。

期望的结果:

MainWindow.xaml 是一个汉堡菜单,左侧是菜单,右侧是views.accounts.xaml。

Views.Accounts.xaml:

    <UserControl>

<Grid Background="White">
    <!--Define 2 Rows-->
    <Grid.RowDefinitions>
        <RowDefinition Height="48"/>
        <RowDefinition/>
    </Grid.RowDefinitions>

<!--Header-->
<Border Grid.Row="0" Background="#FF444444"...>
<Grid Grid.Row="1" Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="250"/>
        </Grid.ColumnDefinitions>

<!--Options-->
<StackPanel Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"...>

<!--Content area-->
<Grid Grid.Row="1" Grid.Column="0" Margin="0 20 0 0">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <ScrollViewer Grid.Row="0">
            <ListView Style="{StaticResource VirtualisedMetroListView}"
                      MinHeight="250" Name="accountsListView">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Username" DisplayMemberBinding="{Binding username}"/>
                        <GridViewColumn Header="Password" DisplayMemberBinding="{Binding password}"/>
                        <GridViewColumn Header="Email" DisplayMemberBinding="{Binding email}"/>
                        <GridViewColumn Header="Verified" DisplayMemberBinding="{Binding verified}"/>
                    </GridView>
                </ListView.View>
            </ListView>
                </ScrollViewer>
                <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right">
                <Button Content="Clear" Width="74" Click="clear_Click"/>
                <Button Margin="10 0 0 0" Content="Export" Width="74"/>
            </StackPanel>
            </Grid>
        </Grid>

<!--Settings-->
<Grid Grid.Row="1" Grid.Column="1" Margin="10 10 0 10">

</Grid>
</Grid>
</UserControl>

【问题讨论】:

  • 由于您没有提供好的minimal reproducible example,因此尝试编写实际答案是不切实际的。但是根据您共享的少量信息,您的问题似乎是,将ListView 嵌套在StackPanel 内(一个元素可以为其子级提供尽可能多的空间......它只是剪辑超出大小的任何内容),ListView 无法知道它应该显示滚动条。不清楚你为什么在这里使用StackPanel。看起来你最好在网格中有两行,第二行有Height=Auto
  • @PeterDuniho 我尝试使用 2 行网格而不是堆栈面板。它仍然没有工作。
  • @PeterDuniho 用更多代码更新了我的问题。
  • StackPanel 是这里的问题。你能把它去掉吗?如果您将Listview 直接包装在一个网格中,您甚至不需要添加特定的Scrollviewer

标签: c# wpf xaml listview


【解决方案1】:

通常这种问题没有几个原因:

  • ListView 在 StackPanel 中
  • ListView 位于自动高度网格行内。
  • ListView 位于 ScrollViewer 中。

解决此问题的最简单方法是删除 StackPanel 和 ScrollViewer 控件。 ListView 包含内置的 ScrollViewer,因此您不必手动定义它。

还要确保 Grid 的 RowDefinition 未设置为 Height="Auto"。

例如:

<!--Content area-->
<Grid Grid.Row="1" Grid.Column="0" Margin="0 20 0 0">
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <ListView Style="{StaticResource VirtualisedMetroListView}" MinHeight="250" Name="accountsListView">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Username" DisplayMemberBinding="{Binding username}"/>
                <GridViewColumn Header="Password" DisplayMemberBinding="{Binding password}"/>
                <GridViewColumn Header="Email" DisplayMemberBinding="{Binding email}"/>
                <GridViewColumn Header="Verified" DisplayMemberBinding="{Binding verified}"/>
            </GridView>
        </ListView.View>
    </ListView>
    <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right">
        <Button Content="Clear" Width="74" Click="clear_Click"/>
        <Button Margin="10 0 0 0" Content="Export" Width="74"/>
    </StackPanel>
</Grid>

还要确保 VirtualisedMetroListView 样式不包含任何可能影响 ScrollViewer 的内容。

【讨论】:

  • 问题已解决。问题是父网格的行高设置为自动。
猜你喜欢
  • 2015-02-21
  • 2018-07-30
  • 1970-01-01
  • 2021-11-16
  • 2019-11-09
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
相关资源
最近更新 更多