剪裁AdornerLayer

时间:2012-10-28 09:42:55

标签: wpf adorner adornerlayer

我有一个PanZoomImage类定义如下:

<Border Grid.Row="0" Name="border" ClipToBounds="True">
    <Canvas Name="canvas">
        <Image Name="image" RenderOptions.BitmapScalingMode="NearestNeighbor" Stretch="None" 
           Source="{Binding Path=Source}"
           MouseLeftButtonDown="image_MouseLeftButtonDown"
           MouseLeftButtonUp="image_MouseLeftButtonUp"
           MouseMove="image_MouseMove"
           MouseWheel="image_MouseWheel"
           Loaded="image_Loaded">
        </Image>
    </Canvas>
</Border>

有时我想在图片上显示Adorners,所以我有一个属性为我提供AdornerLayer图片:

public AdornerLayer Adorners
{
    get
    {
        return AdornerLayer.GetAdornerLayer(image);
    }
}

我使用此属性为图像添加不同的装饰器。问题是,当我平移或缩放图像时,aodrners不会被剪裁并显示在保存PanZoomImage的控件之外,如下所示: No clipping

我尝试了几种解决方案:

我尝试为边框,画布和图片设置ClipToBounds=True

我尝试为ClipToBounds=True和每个Adorner单独设置AdornerLayer

我尝试在Adorner的OnRender中设置剪辑几何。

我还注意到Adorner有一个IsClipEnabled属性但是当我尝试将其设置为true时,我一直得到一个NullReferenceException(即使Adorner绝对不是null)...

谢谢!

1 个答案:

答案 0 :(得分:0)

IsClipEnabled属性有效。如果装饰控件没有父级,则抛出NullPointerException。在设置IsClipEnabled之前,您必须将控件放入某个容器中。

相关问题