Wpf - Как я могу получить LineHeight нормального TextBox в коде? - PullRequest
4 голосов
/ 10 июня 2011

Я работаю над CustomControl, который наследуется от TextBox и его можно изменить, удерживая Ctrl при перетаскивании мыши, но иногда, когда вы изменяете размер, линии обрезаются следующим образом:

enter image description here

Если это произойдет, я бы хотел отрегулировать выбранную высоту, чтобы линии не обрезались.Это код, который у меня есть на данный момент:

double LineHeight = ??;
double requiredHeightAdjustment = this.Height % LineHeight; 

                if (requiredHeightAdjustment != 0)
                {
                    this.Height -= requiredHeightAdjustment;
                }

- Правка -

На случай, если кому-то понадобится это в будущем, вот что я закончил:

double fontHeight = this.FontSize * this.FontFamily.LineSpacing;

double requiredHeightAdjustment = this.Height % fontHeight;

var parent = this.Parent as FrameworkElement;

if (requiredHeightAdjustment != 0)
{
    double upwardAdjustedHeight = (fontHeight - requiredHeightAdjustment) + this.Height;

    if (requiredHeightAdjustment >= fontHeight / 2 && this.MaxHeight >= upwardAdjustedHeight
        && (parent == null || parent.ActualHeight >= upwardAdjustedHeight))
        this.Height = upwardAdjustedHeight;
    else
        this.Height -= requiredHeightAdjustment;
}

Это решение также вносит наименьшее необходимое изменение в выбранный размер TextBox вместо того, чтобы всегда вносить отрицательное изменение.

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Поскольку ваш LineHeight зависит от семейства шрифтов и размера шрифта, вы можете посмотреть на класс GlythTypeface в .NET 4.0. Это может быть слишком низкоуровневым, но имеет такие свойства, как высота

0 голосов
/ 01 февраля 2018

Это было задано несколько лет назад, но на всякий случай, если кто-нибудь зайдет сюда в поисках решения, вы можете использовать TextBlock.LineHeight присоединенное свойство , чтобы получить TextBox s LineHeight:

var LH = TextBlock.GetLineHeight(YOUR_TEXTBOX);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...