0

我正在使用Microsoft.Expression.Controls.CalloutCanvas. 大多数时候它看起来很好,如下所示:
普通的

然而,当它被调整大小时,锚点(和部分投影)会以某种方式被切断:

隔断

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

这是 XAML(标注对象用作命名控件的模板,该控件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>

请注意,调整大小的装饰器似乎在拐角处显示椭圆形,从而允许调整标注的大小。装饰者的代码只改变了的WidthHeightCalloutElement

关于为什么会发生这种情况以及如何解决它的任何想法?任何帮助是极大的赞赏。

4

2 回答 2

1

我通过覆盖GetLayoutClip()方法解决了这个问题。是的,有点hacky,但到目前为止工作正常。很想知道是否有更好的解决方案。

protected override Geometry GetLayoutClip(Size layoutSlotSize)
{
    return null;
}
于 2012-08-27T23:18:37.377 回答
1

我通过覆盖解决了同样的问题:MeasureOverride(Size constraint)

protected override Size MeasureOverride(Size constraint)
{
    return constraint;
}
于 2018-03-19T19:59:04.470 回答