Форма выноски обрезается при изменении размера на холсте - PullRequest
0 голосов
/ 09 декабря 2011

Я использую Microsoft.Expression.Controls.Callout , чтобы нарисовать объект выноски на Canvas.Большую часть времени он выглядит нормально, как показано ниже:
Normal

Однако при изменении размера точка привязки (и часть тени) как-то обрезается:

Cutoff

Я пытался установить различные свойства, такие как SnapToDevicePixels, UseLayoutRounding и т. Д., Но пока ничего не работает.

Вот 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>

Обратите внимание, что средство изменения размера, по-видимому, отображает овалы по углам, позволяя изменить размер выноски.adorner меняет только Width и Height из CalloutElement.

Любая идея о том, почему это происходит и как это исправить? Любая помощь с благодарностью.

Ответы [ 2 ]

1 голос
/ 19 марта 2018

Я решил ту же проблему, переопределив: MeasureOverride(Size constraint)

protected override Size MeasureOverride(Size constraint)
{
    return constraint;
}
1 голос
/ 28 августа 2012

Я решил это, переопределив метод GetLayoutClip(). Да, вроде хаки, но пока работает отлично. Люблю знать, если есть лучшее решение.

protected override Geometry GetLayoutClip(Size layoutSlotSize)
{
    return null;
}
...