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

标签 wpf scrollviewer

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

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

我们绑定(bind)到ComputedVerticalScrollbarVisibility属性,触发一些边距更改。这会触发 MeasureOverride,从而导致循环。我们有其他解决方法来解决这个问题,但我想知道为什么它是这样编码的。

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

最佳答案

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

优化性能:其他建议: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 必须测量“纯”内容以检查是否应避免滚动条。为此,需要执行完整的额外测量过程,而不将滚动条添加到内容中。

关于wpf - ScrollViewer.MeasureOverride 将 ComputerScrollbarVisibility 设置为 Collapsed,然后再将其设置为正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63810526/

相关文章:

wpf - 如何将 DataTrigger 绑定(bind)到单独的 ListBox ScrollViewer 的 ComputedVerticalScrollBarVisibility 属性?

c# - Scrollviewer 正在自行向下滚动

.net - 更改背景不透明度而不更改内容不透明度

c# - 带有文本的 WPF DataGrid 进度条

textbox - 将 Grid 的垂直滚动位置与 RichEditBox 或 TextBox 匹配

c# - 在 ScrollViewer UWP 内通过触摸拖动形状

c# - ListBox 知道它在某个遥远的 ScrollViewer 中吗?

wpf - 定义菜单项快捷方式

c# - 在 WPF XAML 中,如何连接 2 个常量以便使用预定义路径?

wpf - 如何从选择默认资源字典的对象中排除对象?