Почему FormattedText.BuildGeometry () создает геометрию с фигурами с верхним полем 9px? - PullRequest
0 голосов
/ 28 сентября 2019

Я заметил, что моя пользовательская форма имеет верхнее поле ~ 9px (и левое поле 0.5px тоже).

Example

Этов основном это класс, который расширяет Shape, получая данный Text и другие текстовые атрибуты, и создает фигуру с таким же размером.

Пытаясь понять, почему это поле было (нечто я хотел), я обнаружил, что FormattedText.BuildGeometry() создает его.

_textGeometry = new FormattedText(Text ?? "", Thread.CurrentThread.CurrentUICulture, 
    FlowDirection.LeftToRight, new Typeface(FontFamily, FontStyle, FontWeight, FontStretch), 
    FontSize, Brushes.Black).BuildGeometry(Origin);

Текст: Ctrl + V
FontFamily: SegoeИнтерфейс пользователя
FontStyle: Обычный
FontWeight: Обычный
FontStretch: По умолчанию
Источник: Новая точка(0.5, 0.5)

Я знаю, как решить эту проблему, просто переопределив MeasureOverride и применив Transform, например:

protected override Size MeasureOverride(Size constraint)
{
    var definingGeometry = DefiningGeometry;
    var dashStyle = (DashStyle)null;

    if (_pen != null)
    {
        dashStyle = _pen.DashStyle;

        if (dashStyle != null)
            _pen.DashStyle = null;
    }

    var renderBounds = definingGeometry.GetRenderBounds(_pen);

    if (dashStyle != null)
        _pen.DashStyle = dashStyle;

    return new Size(Math.Max(renderBounds.Right - renderBounds.X, 0.0), Math.Max(renderBounds.Bottom - renderBounds.Y, 0.0));
}

Код, частично взятый отсюда.

protected override void OnRender(DrawingContext drawingContext)
{
    _textGeometry.Transform = new TranslateTransform(-_textGeometry.Bounds.X, -_textGeometry.Bounds.Y);

    //If the outline of the text should not be rendered outside, use the base OnRender method.
    if (!UserSettings.All.DrawOutlineOutside)
    {
        base.OnRender(drawingContext);
        return;
    }

    //This code will draw the outline outside the text.          
    drawingContext.DrawGeometry(null, _pen, _textGeometry);
    drawingContext.DrawGeometry(Fill, null, _textGeometry);
}

Теперь, что касается того, почему эта геометрия имеет такой запас, у меня нет идей.Ты хоть представляешь, что происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...