ScrollViewer滚动条过早出现

时间:2017-02-17 01:54:19

标签: c# wpf xaml gridview scrollview

我有一个GridView,在List视图中有三列。

int -> int

调整列的大小时,水平滚动条会在任何内容消失之前出现。如果GridView中的某些内容不在视图范围内,我只希望它出现。

示例照片:

为什么第一个屏幕截图有滚动条?如果我调整“下一次运行”列的右边有一个大的边距,它就会消失。

Why does the scrollbar appear here ---- but not appear here?

2 个答案:

答案 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);
    }
  };
}