【问题标题】:In WPF using a ListView is there an elegant way to auto resize items?在 WPF 中使用 ListView 是否有一种优雅的方式来自动调整项目的大小?
【发布时间】:2011-02-23 08:24:11
【问题描述】:

我最近编写了我的第一个 WPF 应用程序,其中包含从 Web 服务轮询的项目列表。这些项目通过 GridView 在 ListView 中显示/数据绑定。后台线程定期轮询网络服务并更新列表。

如果说,我最初将三个项目绑定到 ListView,只显示一个描述和三个描述,例如:

- ProjectA
- ProjectB
- ProjectC

稍后添加一个带有“AReallyReallyLongProjectName”描述的新项目,我最终会得到一个类似的列表:

- ProjectA
- ProjectB
- ProjectC
- AReallyR

GridViewColumn 不会更新它的宽度,随后会切断任何扩展原始宽度的新项目。

我添加了这段代码来强制调整列的大小,但它看起来有点笨拙。 (设置宽度只是为了将其设置为无强制调整大小似乎很奇怪)

if(gridView != null) {
    foreach(var column in gridView.Columns) {
        if (double.IsNaN(column.Width) column.Width = column.ActualWidth;
        column.Width = double.NaN;
    }
}

有没有更好、更优雅的解决方案来完成同样的事情?

【问题讨论】:

  • 您将 GridViewColumn.Width 属性设置为什么?我尝试使用 DataGrid 模拟这种行为,并且 DataGridTextColumn 知道足以在文本更改时进行扩展。您可以将 ListView 换成 DataGrid 吗?

标签: c# wpf listview autosize


【解决方案1】:

This 是一种方法。另一种方法是每次更新列表中的项目时手动重置列宽:

private void ResizeGridViewColumn(GridViewColumn column)
{
    if (double.IsNaN(column.Width))
    {
        column.Width = column.ActualWidth;
    }

    column.Width = double.NaN;
}

【讨论】:

  • 您的代码 sn-p 正在执行我上面发布的操作。我只在新项目设置为DataContext 时调用它,所以现在它只在更新期间被调用。感谢您的链接,这似乎比我所拥有的还要多。 :( 我认为对于如此常见的事情会更容易一些。
【解决方案2】:

没有。我想没有更优雅的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2013-07-24
    相关资源
    最近更新 更多