如果文本大小大于框的宽度或高度,我正在尝试自动缩放字体大小。 我正在这样做
// textbox padding & margins excluded
if (formattedText.WidthIncludingTrailingWhitespace > textbox.ActualWidth)
{
do
{
// reduce font size by step
fontSize -= 1.0;
// set fontsize ready for re-measure
formattedText.SetFontSize(fontSize);
} while ((formattedText.WidthIncludingTrailingWhitespace >
textbox.ActualWidth) && (fontSize > minimumFontSize));
}
myTextBox.FontSize = fontSize;
return fontSize;
但是文本被剪切或裁剪。
请查看附件快照here
红色标记是文本框的边框。
谁能建议我该怎么办?
我也尝试过
if (formattedText.Width> textbox.ActualWidth)
if (formattedText.Extent> textbox.ActualWidth)
谢谢
答案 0 :(得分:0)
要使此行与多行TextBox一起使用,您需要做一些额外的事情。
MaxTextWidth
,以便它可以正确计算高度TextBox
样式为Padding
,请确保在您的Width
和Height
计算中考虑到这一点这是一个有效的示例:
private void AdjustText()
{
var dpiInfo = VisualTreeHelper.GetDpi(MyTextBox);
var fontSize = MyTextBox.FontSize;
var minimumFontSize = 8;
var typeface = new Typeface(MyTextBox.FontFamily,
MyTextBox.FontStyle,
MyTextBox.FontWeight,
MyTextBox.FontStretch);
var formattedText = new FormattedText(
MyTextBox.Text,
Thread.CurrentThread.CurrentCulture,
MyTextBox.FlowDirection,
typeface,
fontSize,
MyTextBox.Foreground,
dpiInfo.PixelsPerDip);
formattedText.MaxTextWidth = MyTextBox.Width - (MyTextBox.Padding.Left + MyTextBox.Padding.Right);
if (formattedText.Height > MyTextBox.Height - (MyTextBox.Padding.Top + MyTextBox.Padding.Bottom))
{
do
{
// reduce font size by step
fontSize -= 2.0;
// set fontsize ready for re-measure
formattedText.SetFontSize(fontSize);
} while (formattedText.Height > MyTextBox.Height - (MyTextBox.Padding.Top + MyTextBox.Padding.Bottom) && fontSize > minimumFontSize);
MyTextBox.FontSize = fontSize;
}
}
答案 1 :(得分:-1)
您仅在检查宽度。但是在屏幕截图中,您似乎对文本框的高度有疑问。