我有一个GridView,在List视图中有三列。
int -> int
调整列的大小时,水平滚动条会在任何内容消失之前出现。如果GridView中的某些内容不在视图范围内,我只希望它出现。
示例照片:
为什么第一个屏幕截图有滚动条?如果我调整“下一次运行”列的右边有一个大的边距,它就会消失。
答案 0 :(得分:1)
如果你将listview放在一个容器内,该容器的大小与每行的总宽度完全相同,那么它没有剩余空间用于垂直滚动条,并且UI总是在WPF中保留该空间,它会重叠内容,这就是最后一列可见的原因,以保留该空间
答案 1 :(得分:0)
无论滚动条如此出现的原因如何,我能够通过以下代码解决我的问题,只有在内容不在视图时才能手动启用水平滚动条。
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled">
并在Window的构造函数中关闭它:
//If the sum of all column widths > ListView width -> enable scrollbar.
foreach (var column in gridView.Columns)
{
((INotifyPropertyChanged)column).PropertyChanged += (sender, e) =>
{
if (e.PropertyName == "ActualWidth")
{
var totalColumnWidth = gridView.Columns.Sum(col => col.ActualWidth);
var listViewWidth = listView.ActualWidth;
if (totalColumnWidth > listViewWidth)
listView.SetValue(ScrollViewer.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Auto);
else
listView.SetValue(ScrollViewer.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Disabled);
}
};
}