【问题标题】:How to know when an ItemsControl has overflowed its ScrollViewer?如何知道 ItemsControl 何时溢出其 ScrollViewer?
【发布时间】:2009-10-07 10:24:06
【问题描述】:

当 ItemsControl 中的项目溢出其容器时,如何使用触发器交换模板?

在我当前的实现中,我想根据 ItemsControl 的当前状态是否使得如果滚动条可见性设置为 Auto,内容会导致 ScrollViwer 的滚动条出现,我想显示一个更简短的模板形式。因此,我对 ScrollViewer 或 ItemsControl 上的任何属性都感兴趣,这可能会给我一个关于它是否溢出它的 ScrollViewer 的线索。如果我必须使用一些自定义 ValueConverter 来创建一个合理的布尔值来绑定,我想那也可以。

【问题讨论】:

  • 以某种方式比较 ScrollViewer 和 ItemsControl 的 ActualWidth 属性是否有意义?我要先去那条小巷看看能不能搞定。
  • 也许使用 ExtentWidth 或 ViewportWidth 或比较两者可能会导致我找到正确的解决方案。现在正在试验。

标签: wpf wpf-controls overflow scrollviewer


【解决方案1】:

好的,所以我最终自己解决了这个问题。

在我的例子中,我使用的是逻辑滚动而不是物理滚动,因为我有一个水平布局,所以我所要做的就是在 ScrollViewer.ScrollableWidth 上触发。在我的情况下,让这个工作的秘诀是确保我将 ScrollViewer.Horizo​​ntalScrollBarVisibility 设置为 Hidden 而不是 Disabled。这将允许滚动内容,并使 scrollableWidth 属性实际上具有有意义的值。

注意: 奇怪地将 Horizo​​ntalScrollBarVisibility 设置为 Hidden 似乎会在视觉上折叠滚动条,所以我不完全确定在这种情况下 Collapse 和 Hidden 之间有什么区别。

【讨论】:

  • 所以我发现这种方法有问题。仔细一看,当 ScrollViewer 的 ScrollableWidth 属性发生变化时,通过 ItemTemplate 的变化来修改 ItemsControl 的内容,会导致 ScrollableWidth 再次发生变化以适应模板的变化,从而开始无限循环绑定依赖。如果有解决方法,那么我的解决方案仍然有效,否则我想我仍在寻找替代解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多