Welcome

首页 / 软件开发 / .NET编程技术 / WPF自定义控件 - 布局

WPF自定义控件 - 布局2010-11-20 cnblogs Curry一.ScrollViewer

在WPF自定义控件 —— 自绘篇我们做了 一个可拖动的矩形,但你是否发现当矩形拖出背景后就不见了,一般来说对于不 可见区域需要有ScrollBar来呈现,如图:

对于这一应用在WPF中最常用的应该在控件外面包个ScrollViewer,那 么如何使得我们的控件支持ScrollViewer呢?

首先我们来了解一下 ScrollViewer基本原理

通过上图我们可以看到ScrollViewer是以Grid为容器组成的控件,其 中主要包括ScrollContentPresenter,和两个ScrollBar,其中ScrollBar就是我 们第一张图中看到那两条,它也是一个由多个控件组成的复合控件,在这里先略 过ScrollBar;来看红色边框内的ScrollContentPresenter,可以看到我们的控 件CustomerRender在ScrollContentPresenter内,那么我们控件呈现的位置必定 是由它来控制的。

这个神秘的ScrollContentPresenter到底做了什么能 让我们看到一部分内容呢?看下这张图就清楚了

我们可以知道ScrollContentPresenter实际对我们玩了一个遮罩效果 ,把我们的控件当作一个背景图,用ScrollBar来移动背景位置,在 ScrollViewer外的控件可视部分统统被裁减掉了。只要继承UIElement的控件就 可以重载GetLayoutClip方法来剪切区域。

protected override Geometry GetLayoutClip(Size layoutSlotSize)
{
return new RectangleGeometry(new Rect(base.RenderSize));
}