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

ScrollViewer.MeasureOverride settings ComputerScrollbarVisibility to Collapsed before setting it to the correct value

如果 ScrollviewerVerticalScrollbarVisibility 设置为自动,则 ScrollViewerMeasureOverride 方法首先将 ComputedVerticalScrollbarVisibility 设置为折叠。只有这样,它才能计算出正确的值并在必要时再次更改它。水平滚动条的行为相同。

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

我们绑定到 ComputedVerticalScrollbarVisibility 属性,触发一些保证金变化。这会触发 MeasureOverride,从而导致循环。我们有其他解决方法来解决这个问题,但我想知道为什么它是这样编码的。

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

这个没有确定的答案。为什么要这样写,只有代码的作者自己知道。
您对性能影响的观察是 Microsoft 建议禁用 ScrollBar 或明确启用它的原因。建议始终避免将滚动条的可见性设置为 Auto.

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

"The Auto value is intended for cases when space is limited and scrollbars should only be displayed when necessary. For example, it may be useful to use this ScrollBarVisibility value with a ListBox of 30 items as opposed to a TextBox with hundreds of lines of text."

这也回答了您的问题:ScrollViewer 必须测量“纯”内容以检查是否应避免滚动条。为此,它需要一个完整的额外测量通道,而不会向内容添加滚动条。