WPF 解决 ListView 的滚动条不显示
本文告诉大家如何解决一个诡异的问题,如果有一个 ListView 同时里面的元素的高度很长,但是滚动条就是不显示,怎么让这个滚动条显示
本文不属于小白博客,忽略所有的业务环境和样式问题以及对 ScrollViewer 的设置问题
在开始发现这个问题请先看 ListView 的滚动条,通过继承 ListView 或 ListBox 可以在 Load 事件拿到滚动条,需要判断 ScrollViewer 的 ExtentHeight 的大小
private void ListBox_Loaded(object sender, RoutedEventArgs e)
_scroll = this.VisualDescendant<ScrollViewer>();
}
如果拿到的
_scroll
的 ExtentHeight 的大小相对预期小,则可以继续看本文的方法,如果有一些方法 Load 之后还没有设置数据可以等待设置数据之后通过 Dispatcher.InvokeAsync 的方法判断 ExtentHeight 的高度
如果这时高度太小,可能是因为 ItemsPresenter 没布局,尝试使用下面的代码解决
protected override void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue)
Dispatcher.InvokeAsync(() =>
InvalidateMeasure();
if (_scroll != null)
ItemsPresenter itemsPresenter = _scroll.Content as ItemsPresenter;
var size = new Size(double.PositiveInfinity, double.PositiveInfinity);
itemsPresenter?.Measure(size);