确定ListViewItem在WPF ListView中是完全还是仅部分可见

时间:2013-02-07 16:59:52

标签: wpf listview listviewitem adorner adornerlayer

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

当用户将一些内容拖入listview时,我在ListView的AdornerLayer上显示一个水平条,以显示项目将插入的索引。

我也在自动滚动listView。因为ScrollViewer.CanContentScroll =“False”ListViewItems部分可见。

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

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

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

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

由于

1 个答案:

答案 0 :(得分:0)

您可以使用ScrollViewer.VerticalOffsetScrollViewer.ViewPortHeight的组合以及listviewitem相对于列表视图本身的位置

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

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

itemPosition.Y + itemHeight - viewPortHeight

然后,如果该值介于itemHeight-viewPortHeight之间,则可见

或者,什么可能更清洁:

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