问题描述
如果将VerticalScrollbarVisibility
中的Scrollviewer
设置为“自动”,则该MeasureOverride
的{{1}}方法首先将ScrollViewer
设置为“折叠”。只有这样,它才能计算正确的值,并在必要时再次更改它。水平滚动条的行为相同。
我们绑定到ComputedVerticalScrollbarVisibility
属性,触发一些边距更改。这将触发ComputedVerticalScrollbarVisibility
,从而导致循环。我们还有其他解决方法可以解决此问题,但是我想知道为什么要用这种方式进行编码。
为什么在设置正确的计算值之前先将其设置为“折叠”?
解决方法
对此没有确切答案。只有代码的作者才知道为什么要这样做。
您对性能影响的观察是Microsoft建议禁用ScrollBar
或显式启用它的原因。建议始终避免将滚动条的可见性设置为Auto
。
优化性能:其他建议:Avoid Using ScrollBarVisibility=Auto:
“ Auto值用于空间有限且仅在必要时才显示滚动条的情况。例如,将此ScrollBarVisibility值与30个项目的ListBox而不是与数百个TextBox一起使用可能是有用的文本行。”
这还将回答您的问题:ScrollViewer
必须测量“纯”内容,以检查是否应避免使用滚动条。为此,需要进行一次完整的额外测量,而无需将滚动条添加到内容中。