ListView-计算实际可用面积

本文关键字:计算 ListView- | 更新日期: 2023-09-27 18:00:52

我使用这个方法来调整ListView的大小,将其列调整到每个列所需的空间,并将剩余的空间添加到第二列,这样就不会出现水平滚动条。

    private void SetColumnWidths(object sender)
    {
        ListView listView = (sender as ListView);
        if (listView != null)
            if (listView.IsLoaded)
            {
                listView.UpdateLayout();
                GridView gridView = listView.View as GridView;
                if (gridView != null)
                {
                    UpdateColumnWidths(gridView);
                    listView.UpdateLayout();
                    Decorator border = VisualTreeHelper.GetChild(listView, 0) as Decorator;
                    if (border != null)
                    {
                        ScrollViewer scroller = border.Child as ScrollViewer;
                        if (scroller != null)
                        {
                            ItemsPresenter presenter = scroller.Content as ItemsPresenter;
                            if (presenter != null)
                            {
                                double columnWidth = presenter.ActualWidth - 2;
                                for (int i = 0; i < gridView.Columns.Count; i++)
                                {
                                    if (i != 1)
                                        columnWidth -= gridView.Columns[i].ActualWidth;
                                }
                                if (columnWidth < 0)
                                    columnWidth = 0;
                                gridView.Columns[1].Width = columnWidth;
                            }
                        }
                    }
                }
            }
    }
    private void UpdateColumnWidths(GridView gridView)
    {
        foreach (var column in gridView.Columns)
        {
            if (double.IsNaN(column.Width))
            {
                column.Width = 0;
                column.Width = double.NaN;
            }
        }
    }

一切都很好。。。直到BorderThickness来到城里,无论是对于ListView,还是对于ListViewItem的模板,都是最糟糕的。我想让你帮我的是如何检索ListViewItem模板的BorderThickness,这样我就可以在不包括它的情况下开始调整大小的过程。

或者更好的是,你知道我如何计算ListView的真正可用区域吗?没有边框、滚动条、鼠标、猫、狗等?

提前谢谢!

ListView-计算实际可用面积

为什么不将第二列的宽度设置为*,而将所有其他列的宽度设为Auto?这将使所有列占用所需的空间,第二列将占用所有剩余空间。

我没有找到任何其他解决方案,而是将ListViewItem模板内的边框厚度设置为0(左右两侧(。这样我的列大小调整就可以了。不是最好的解决方案,但可以…