Wpf-如何在代码中获得普通TextBox的线高?

时间:2011-06-10 02:49:22

标签: c# wpf textbox

我正在处理从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 个答案:

答案 0 :(得分:1)

由于LineHeight依赖于字体系列和字体大小,因此您可能需要查看.NET 4.0中的GlythTypeface类。虽然它可能有点太低,但它有像Height

这样的属性

答案 1 :(得分:0)

几年前就已经提出这个问题了,但是如果有人在这里寻找解决方案,你可以使用TextBlock.LineHeight 附加属性来获取TextBox的{ {1}}:

LineHeight