在画布上调整大小时,会调出标注形状

时间:2011-12-09 04:52:51

标签: c# wpf xaml callout

我正在使用Microsoft.Expression.Controls.CalloutCanvas上绘制一个标注对象。大部分时间它看起来很好,如下所示:
Normal

但是,当调整大小时,锚点(以及投影的一部分)会以某种方式被切断:

Cutoff

我尝试设置不同的属性,例如SnapToDevicePixelsUseLayoutRounding等,但到目前为止没有任何效果。

这是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

知道为什么会发生这种情况以及如何解决这个问题?非常感谢任何帮助。

2 个答案:

答案 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;
}