首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >裁剪AdornerLayer

裁剪AdornerLayer
EN

Stack Overflow用户
提问于 2012-10-28 17:42:55
回答 1查看 974关注 0票数 2

我有一个定义如下的PanZoomImage类:

代码语言:javascript
复制
<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

代码语言:javascript
复制
public AdornerLayer Adorners
{
    get
    {
        return AdornerLayer.GetAdornerLayer(image);
    }
}

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

我尝试了几种解决方案:

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

我尝试分别为AdornerLayer和每个装饰器设置ClipToBounds=True

我尝试在Adorner的OnRender中设置一个剪辑几何图形。

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-12-08 21:59:22

IsClipEnabled属性起作用。如果装饰的控件没有父级,则引发NullPointerException。在设置IsClipEnabled之前,您必须将控件放入某个容器中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13107772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档