我正在使用此方法调整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的实际可用区域,没有边框,滚动条,鼠标,猫,狗等?
提前谢谢!
答案 0 :(得分:0)
为什么不设置第二列宽= *
而所有其他列宽= Auto
?这将使所有列占用他们需要的空间,第二列将占用所有剩余空间。
答案 1 :(得分:0)
我没有找到任何其他解决方案,而是将我的ListViewItem
模板中的边框厚度设置为0,左右两侧。有了这个我的列大小调整是好的。不是最好的解决方案,但确定......