ScrollViewer.MeasureOverride设置ComputerScrollbarVisibility为Collapsed,然后将其设置为正确的值

问题描述

如果将VerticalScrollbarVisibility中的Scrollviewer设置为“自动”,则该MeasureOverride的{​​{1}}方法首先将ScrollViewer设置为“折叠”。只有这样,它才能计算正确的值,并在必要时再次更改它。水平滚动条的行为相同。

您可以在这里看到此:https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/windows/Controls/ScrollViewer.cs,1202

我们绑定到ComputedVerticalScrollbarVisibility属性,触发一些边距更改。这将触发ComputedVerticalScrollbarVisibility,从而导致循环。我们还有其他解决方法可以解决此问题,但是我想知道为什么要用这种方式进行编码。

为什么在设置正确的计算值之前先将其设置为“折叠”?

解决方法

对此没有确切答案。只有代码的作者才知道为什么要这样做。
您对性能影响的观察是Microsoft建议禁用ScrollBar或显式启用它的原因。建议始终避免将滚动条的可见性设置为Auto

优化性能:其他建议:Avoid Using ScrollBarVisibility=Auto

“ Auto值用于空间有限且仅在必要时才显示滚动条的情况。例如,将此ScrollBarVisibility值与30个项目的ListBox而不是与数百个TextBox一起使用可能是有用的文本行。”

这还将回答您的问题:ScrollViewer必须测量“纯”内容,以检查是否应避免使用滚动条。为此,需要进行一次完整的额外测量,而无需将滚动条添加到内容中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...