【问题标题】:Clipping AdornerLayer剪裁装饰层
【发布时间】:2012-10-17 22:47:25
【问题描述】:

我有一个这样定义的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 的控件之外,如下所示:

我尝试了几种解决方案:

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

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

我尝试在 Adorner 的 OnRender 中设置 Clip Geometry。

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

谢谢!

【问题讨论】:

    标签: wpf adorner adornerlayer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-11-25
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 2019-01-09
      • 2020-01-05
      • 1970-01-01
      相关资源
      最近更新 更多