10

我有ItemsControl一个ScrollViewer. 中的项目ItemsControl扩展为DataTemplate基本上由 组成的Adorner

现在的问题是,在滚动时, 的 Visual ChildrenAdornerScrollViewer. 假设我从水平偏移量 0 滚动到 100,Adorner向左移动的 Visual Children 并且在 旁边可见ScrollViewer,尽管它们应该被隐藏。设置ClipToBounds或不起作用ItemsControlScrollViewer

我知道,它们Adorner在所有元素的 z 顺序之上呈现,但在ScrollViewer. 方式装饰Element的行为与预期的一样,并且通过ScrollViewer.

是否有任何简单的方法可以“剪辑” Adorners,以便它们仅在可见滚动区域中可见?

谢谢,安德烈

4

3 回答 3

11

在包含控件上设置ClipToBounds是不够的。您还必须设置装饰器的IsClipEnabled属性。

于 2015-12-08T14:05:01.400 回答
2

I've encountered the same problem when subclassing the WPFToolkit DataGrid to draw an adorner around the current cell.

The content of the ScrollViewer is rendered by a ScrollContentPresenter instance. ScrollContentPresenter has its own adorner layer, which is accessible through the ScrollContentPresenter.AdornerLayer property.

I found that my adorner correctly clips if I add it to that layer.

于 2009-10-26T05:33:24.103 回答
0

我的解决方案是将剪辑区域推送到绘图上下文中,渲染我需要的任何内容,然后在最后弹出剪辑,如下所示:

drawingContext.PushClip(new RectangleGeometry(new Rect(0, 0, this.AdornedElement.RenderSize.Width, this.AdornedElement.RenderSize.Height)));
// continue drawing
drawingContext.Pop();

您可以将其插入任何 Adorner,边界已经作为元素的一部分可用。

于 2018-01-29T20:53:39.207 回答