C# 如何避免在固定高度和宽度的WPF文本框中剪切文本?
如果文本大小大于框的宽度或高度,我将尝试自动缩放字体大小。 我正在这样做C# 如何避免在固定高度和宽度的WPF文本框中剪切文本?,c#,asp.net,wpf,asp.net-core,C#,Asp.net,Wpf,Asp.net Core,如果文本大小大于框的宽度或高度,我将尝试自动缩放字体大小。 我正在这样做 //不包括文本框填充和边距 if(格式化的text.width,包括trailingwhitespace>textbox.ActualWidth) { 做 { //逐步减小字体大小 fontSize-=1.0; //设置fontsize以备重新测量 formattedText.SetFontSize(fontSize); }while((formattedText.WidthIncludingTrailingWhitesp
//不包括文本框填充和边距
if(格式化的text.width,包括trailingwhitespace>textbox.ActualWidth)
{
做
{
//逐步减小字体大小
fontSize-=1.0;
//设置fontsize以备重新测量
formattedText.SetFontSize(fontSize);
}while((formattedText.WidthIncludingTrailingWhitespace>
textbox.ActualWidth)和&(fontSize>minimumFontSize));
}
myTextBox.FontSize=FontSize;
返回字体大小代码>
但文本正在被剪裁或裁剪。
请参阅附加的快照
红色标记是文本框的边框。
有人能建议我该怎么做吗?
我也试过了
if(formattedText.Width>textbox.ActualWidth)
if(formattedText.Extent>textbox.ActualWidth)
谢谢要使用多行文本框,您需要做一些额外的事情
- 您需要在格式化文本上设置一个
MaxTextWidth
,以便正确计算高度
- 如果您的
文本框
样式有填充
请确保在宽度
和高度
计算中考虑到这一点
以下是一个工作示例:
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;
}
}
尝试将TextBox(或TextBlock?)放入Viewbox。感谢您的响应,是否可以通过编程方式将其放入Viewbox?当然,请参见此处:这是为了更新stackoverflow社区,下面@Keithernet提供的解决方案在大多数情况下都可以正常工作,但当文本为粗体时,问题会复制。请看一看屏幕截图屏幕截图字体大小是9,尽管最小字体大小限制是06。不幸的是,我不使用.NET Core 2.2,所以我不知道。我能够成功运行此功能,而且它也工作正常。但是当我改变reductionStepfontSize-=2.0代码>到fontSize-=0.2代码>相同的问题重复出现。因此,对于文本的动态长度和大小,它也可以用fontSize-=2.0进行复制代码>可能吗?ThanksWPF在字体大小和缩放方面一直存在内部数学问题。我不知道FormattedText在内部是如何工作的,所以很难说。嗨,Keithernet,我只是想问一下,你能不能提出一些好的方法来动态减少字体大小,而不是硬编码的值I-e 0.2或2.0?谢谢你的支持,现在回复已经很晚了,但是对于其他犯同样错误的人来说可能会觉得很有帮助。我能够修复formattedText对象中正在通过的“Verdana”是回退字体系列,这导致修复了这一文本问题:)因此,正是这种字体在计算formattedText的精确高度和宽度时遇到了麻烦