【发布时间】: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