C# ScrollViewer滚动条过早出现
我有一个GridView,列表视图中有三列C# ScrollViewer滚动条过早出现,c#,wpf,xaml,gridview,scrollview,C#,Wpf,Xaml,Gridview,Scrollview,我有一个GridView,列表视图中有三列 <ListView ScrollViewer.HorizontalScrollBarVisibility="Auto" > <ListView.View> <GridView> <GridViewColumn Width="100" /> <GridViewColumn Width="
<ListView ScrollViewer.HorizontalScrollBarVisibility="Auto" >
<ListView.View>
<GridView>
<GridViewColumn Width="100" />
<GridViewColumn Width="130" />
<GridViewColumn Width="130" />
</GridView>
</ListView.View>
</ListView>
调整列的大小时,水平滚动条会出现在任何内容消失之前。我只希望它在GridView中的某些内容无法查看时出现
示例照片:
为什么第一个屏幕截图有一个滚动条?只有当我调整“下一次运行”列的大小,使其右侧有较大的边距时,它才会消失
----如果将listview安装在与每行总宽度大小完全相同的容器中,则垂直滚动条没有空间,UI始终在WPF中保留该空间,它将与内容重叠,这就是最后一列可见的原因,无论滚动条出现得如此之快的原因是什么,为了保留该空间,我能够使用以下代码解决我的问题,该代码仅在内容不可见时手动启用水平滚动条
这完全有道理,但不幸的是,禁用垂直滚动条似乎并没有改变任何事情。有什么建议吗?如果您不需要垂直滚动条,那么为什么要使用listview?为什么不直接使用gridview并向其中添加行呢?我确实需要一个垂直滚动条;我只是观察到,禁用它并不能解决我的问题:)因为我看到,只有在WPF listview上才会发生,在WinForms listview上,如果垂直滚动条不存在,则不需要额外的间隙,因此这可能是一个bug或一个design决策来始终保留该空间。更新了我的答案。
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled">
//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);
}
};
}