2

我有一个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>

有时我想在图像上显示装饰器,所以我有一个属性可以为我AdornerLayer提供图像:

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

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

我尝试了几种解决方案:

我尝试设置ClipToBounds=True边框、画布和图像。

我尝试为每个 Adorner 分别设置ClipToBounds=TrueAdornerLayer

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

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

谢谢!

4

1 回答 1

0

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

于 2015-12-08T13:59:21.613 回答