你如何拥有一个没有剪辑儿童的面板`ClipToBounds`?

时间:2015-11-05 14:31:04

标签: wpf c#-4.0 custom-controls

我有一个自定义的Panel实现,它可以渲染相对于物理空间的对象(就像平面图一样)。该面板允许以下操作:

  • 放大/缩小
  • 向上/向下/向左/向右平移
  • 以及与此问题无关的更多内容

该面板与屏幕上的其他几个元素共存,我需要确保自定义面板的图形不会溢出导航和其他控件。

问题在于:

  

如果面板设置为剪辑,它会在排列之前剪切孩子

假设我在平面图中有一个圆圈,并且用户放大到足以使圆圈大于父控件。面板对圆圈应用剪裁,就像它被放置在死点一样,然后将圆圈排列在它应该是的位置。最终结果是圆圈看起来不再像圆圈,我的图像中有间隙。

我需要在排列元素之后应用来应用裁剪,或者仅应用于由孩子编译的整体图像。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

事实证明,我在给WPF博士的信中遇到了问题的相反问题ClipToBounds = "Maybe"

如果我覆盖控件中的GetLayoutClip()方法并返回null,我基本上会关闭元素的剪切。但是,由于我的面板仍然存在ClipToBounds,因此呈现的项目不会溢出应用程序的其余部分。

在将添加到我的自定义面板的所有项目的基类中,我有:

protected override Geometry GetLayoutClip(Size layoutSlotSize)
{
    return null;
}

就我而言,这正是我想要的。老实说,我希望我的布局剪辑基于父面板而不是子尺寸(面板内没有位置感)。