【问题标题】:Determining if a ListViewItem is fully or only partially visible in the WPF ListView确定 ListViewItem 在 WPF ListView 中是完全可见还是仅部分可见
【发布时间】:2013-01-23 06:44:51
【问题描述】:

我有一个 WPF ListView。此 ListView 将包含 n 个项目。

当用户将某些东西拖到列表视图中时,我会在列表视图的 AdornerLayer 上显示一个水平条,以显示将插入该项目的索引。

我也在自动滚动列表视图。因为 ScrollViewer.CanContentScroll="False" ListViewItems 是部分可见的。

我遇到的问题是,当我结束的 ListViewItem 位于顶部且仅部分可见时,我正在绘制的指示条出现在 ListView 的边界之外(在我上面的例子中)。

绘制条的触发器是获取我当前悬停在上面的任何 ListViewItem,抓住它的上边界值并画线。当 ListViewItem 尚未完全可见时,条形图绘制在 ListView 本身之上,显然看起来很奇怪。

总结:尝试确定给定的 ListViewItem 在 ListView 中是否仅部分可见。

在这种情况下,代码并不是那么相关,但如果你愿意,我可以发布一些。

谢谢

【问题讨论】:

  • 什么版本的 Visual Studio?我想我在 2012 年看到了一些东西,你可以让它不被裁剪。只有一条评论。

标签: wpf listview listviewitem adorner adornerlayer


【解决方案1】:

您可能可以结合使用ScrollViewer.VerticalOffsetScrollViewer.ViewPortHeight 和listviewitem 相对于listview 本身的位置

itemPosition = ListViewItem.TransformToAncestor(ListView).Transform(new Point(0, 0));

要判断它是否完全可见,您只需要执行以下操作

itemPosition.Y + itemHeight - viewPortHeight

那么如果该值介于itemHeight-viewPortHeight 之间,那么它是可见的

或者,什么可能更清洁:

(-itemPosition.Y < itemHeight && itemPosition.Y < viewPortHeight)

【讨论】:

  • 就是这样。我需要再进行一次改造。通过上述转换,我可以简单地检查该点的 .Y 值是否为
  • 这不适用于常规ListViews,其中CanContentScroll 通常为false。在那种情况下,viewPortHeight 是可以在视口中显示的项目数,而不是实际的像素高度:msdn.microsoft.com/de-de/library/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
相关资源
最近更新 更多