我正在使用Microsoft.Expression.Controls.Callout在Canvas
上绘制一个标注对象。大部分时间它看起来很好,如下所示:
但是,当调整大小时,锚点(以及投影的一部分)会以某种方式被切断:
我尝试设置不同的属性,例如SnapToDevicePixels
,UseLayoutRounding
等,但到目前为止没有任何效果。
这是XAML(callout对象用作名为CalloutElement
的控件的模板,该控件继承自Control
:
<Style TargetType="{x:Type Editor:CalloutElement}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Editor:CalloutElement}">
<ed:Callout CalloutStyle="RoundedRectangle" Fill="#FFF"
StrokeThickness="2"
AnchorPoint="0.5 1.4">
<ed:Callout.Effect>
<DropShadowEffect BlurRadius="10" Opacity="0.5"/>
</ed:Callout.Effect>
<ed:Callout.Stroke>
<SolidColorBrush Color="Red" />
</ed:Callout.Stroke>
</ed:Callout>
<!-- More XAML for resize adorner -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
请注意,调整大小的装饰器似乎会显示角落处的椭圆,从而可以调整标注大小。装饰代码仅更改Width
的{{1}}和Height
。
知道为什么会发生这种情况以及如何解决这个问题?非常感谢任何帮助。
答案 0 :(得分:1)
我通过覆盖GetLayoutClip()
方法解决了这个问题。是的,有点hacky,但到目前为止工作正常。很想知道是否有更好的解决方案。
protected override Geometry GetLayoutClip(Size layoutSlotSize)
{
return null;
}
答案 1 :(得分:1)
我通过覆盖解决了同样的问题:MeasureOverride(Size constraint)
protected override Size MeasureOverride(Size constraint)
{
return constraint;
}