WPF ListView 随着列大小的调整而变宽,但不会缩小

发布于 2024-07-26 09:41:12 字数 1367 浏览 0 评论 0原文

在以下 .NET 3.5 XAML 中,如果将“Day”列的列宽拖得更宽,ListView 会很好地增长以解决此问题。 但是,如果您随后将列宽拖动得更窄,表格的大小将保持不变。

垂直方向也存在同样的问题。 如果您的某些列有自动换行,则表格会变高以处理此问题,但随后不会缩小。

这是真正愚蠢的部分。 如果删除 ListView.ItemsSource 部分,则 ListView 将按预期工作! 为什么这会影响它呢?

有任何想法吗?

<Window x:Class="TestWpfTables.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="clr-namespace:System.Collections;assembly=mscorlib"
    xmlns:p="clr-namespace:System;assembly=mscorlib"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <ListView HorizontalAlignment="Left">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Day}" Header="Day" />
                </GridView>
            </ListView.View>
            <ListView.ItemsSource>
                <s:ArrayList>
                    <p:DateTime>1990/1/1 12:22:02</p:DateTime>
                    <p:DateTime>1990/1/2 13:2:01</p:DateTime>
                    <p:DateTime>1990/1/5 2:1:6</p:DateTime>
                </s:ArrayList>
            </ListView.ItemsSource>
        </ListView>
    </Grid>
</Window>

In the following .NET 3.5 XAML, if you drag the column width of the 'Day' column wider, the ListView nicely grows to account for this. If you then drag the column width narrower, however, the table stays the same size as it was.

This same problem exists vertically, too. If some of your columns have word wrap, the table will get taller to handle this, but then not shrink back.

Here's the really goofy part. If you remove the ListView.ItemsSource section, then the ListView works as desired! Why would this affect it?

Any ideas?

<Window x:Class="TestWpfTables.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="clr-namespace:System.Collections;assembly=mscorlib"
    xmlns:p="clr-namespace:System;assembly=mscorlib"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <ListView HorizontalAlignment="Left">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Day}" Header="Day" />
                </GridView>
            </ListView.View>
            <ListView.ItemsSource>
                <s:ArrayList>
                    <p:DateTime>1990/1/1 12:22:02</p:DateTime>
                    <p:DateTime>1990/1/2 13:2:01</p:DateTime>
                    <p:DateTime>1990/1/5 2:1:6</p:DateTime>
                </s:ArrayList>
            </ListView.ItemsSource>
        </ListView>
    </Grid>
</Window>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生生漫 2024-08-02 09:41:12

一般来说,所有 WPF ItemsControl 都是“仅增长”的,这意味着我们执行初始布局过程,随后控件仅在内容发生更改时才会调整大小。 默认情况下我们不将大小调整得更小的原因是,它需要昂贵的测量和排列过程,这会对性能产生负面影响

参考:codeplex 线程

In general, all WPF ItemsControls are "grow-only", meaning that we do the initial layout pass and subsequently the control will only resize larger if the content changes. The reason we don't resize smaller by default is that it would require an expensive measure and arrange pass, which would negatively impact performance

ref: codeplex thread

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文