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的真正可用区域吗?没有边框、滚动条、鼠标、猫、狗等?
提前谢谢!
为什么不将第二列的宽度设置为*
,而将所有其他列的宽度设为Auto
?这将使所有列占用所需的空间,第二列将占用所有剩余空间。
我没有找到任何其他解决方案,而是将ListViewItem
模板内的边框厚度设置为0(左右两侧(。这样我的列大小调整就可以了。不是最好的解决方案,但可以…