ScrollViewer 滚动条过早出现
ScrollViewer scrollbar appears prematurely
我有一个在列表视图中包含三列的 GridView。
<ListView ScrollViewer.HorizontalScrollBarVisibility="Auto" >
<ListView.View>
<GridView>
<GridViewColumn Width="100" />
<GridViewColumn Width="130" />
<GridViewColumn Width="130" />
</GridView>
</ListView.View>
</ListView>
调整列大小时,水平滚动条会在任何内容消失之前出现。我只希望它在 GridView 中的某些内容不可见时显示。
示例照片:
为什么第一个截图有滚动条?只有当我调整 "Next Run" 列的大小以使其右侧有那么大的边距时,它才会消失。
----
如果您将列表视图放入一个容器中,该容器的大小与每行的总宽度完全相同,那么它就没有 space 用于垂直滚动条和 UI始终在 WPF 中保留 space,它会与内容重叠,这就是最后一列可见的原因,以保留 space
不管滚动条出现这么快的原因是什么,我都可以通过以下代码手动启用水平滚动条来解决我的问题仅当内容不在视图中时.
<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);
}
};
}
我有一个在列表视图中包含三列的 GridView。
<ListView ScrollViewer.HorizontalScrollBarVisibility="Auto" >
<ListView.View>
<GridView>
<GridViewColumn Width="100" />
<GridViewColumn Width="130" />
<GridViewColumn Width="130" />
</GridView>
</ListView.View>
</ListView>
调整列大小时,水平滚动条会在任何内容消失之前出现。我只希望它在 GridView 中的某些内容不可见时显示。
示例照片:
为什么第一个截图有滚动条?只有当我调整 "Next Run" 列的大小以使其右侧有那么大的边距时,它才会消失。
如果您将列表视图放入一个容器中,该容器的大小与每行的总宽度完全相同,那么它就没有 space 用于垂直滚动条和 UI始终在 WPF 中保留 space,它会与内容重叠,这就是最后一列可见的原因,以保留 space
不管滚动条出现这么快的原因是什么,我都可以通过以下代码手动启用水平滚动条来解决我的问题仅当内容不在视图中时.
<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);
}
};
}