gpt4 book ai didi

c# - 设置 MaxTextWidth 时出现 WPF 字对齐问题

转载 作者:行者123 更新时间:2023-11-30 16:02:41 25 4
gpt4 key购买 nike

我正在使用 FormattedText 来显示文本。我需要根据提供的选项水平对齐文本。一切正常,直到我设置“MaxTextWidth”属性(我需要这个来修整文字)。如何对齐文本并启用单词修剪?

    FormattedText formatted_text = new FormattedText(
text, System.Globalization.CultureInfo.GetCultureInfo("en-US"),
FlowDirection.LeftToRight,
typeface, em_size, brush);
formatted_text.TextAlignment = TextAlignment.Right;
drawingContext.DrawText(formatted_text, origin);

这可以很好地按预期对齐代码。但我需要修剪 w.r.t MaxTextWidth 这个词。我在设置 MaxTextWidth 时遇到问题。如何计算 MaxTextWidth?

图像中的点是原点。

这是我没有设置 MaxTextWidth 时得到的结果

当我设置 MaxTextWidth = 100 时

如何计算 MaxTextWidth 以便对齐裁剪后的句子?

编辑:添加更多截图 Before setting MaxTextWidth, properly aligned

设置MaxTextWidth之前,正确对齐,设置后

enter image description here我失去了单词对齐,看看 w.r.t 显示的引用点

最佳答案

这是一个奇怪的行为 DrawingContext.DrawTextMaxTextWidthorigin 有影响。如果 FormattedText 右对齐且 MaxTextWidth = 0,即默认,DrawText 将原点左边的文字。如果 MaxTextWidth > 0DrawText 将文本置于原点右侧。

因此,如果右对齐,则必须从 origin.X 中减去 MaxTextWidth如果居中则为一半。这是一个例子。蓝点是所需的原点,红点是校正后的原点。 DrawText origin example

using System.Windows;
using System.Windows.Media;

public void DrawTextTest(DrawingContext dc) {
var y = 100.0;
foreach (var align in new TextAlignment[]{
TextAlignment.Left, TextAlignment.Center, TextAlignment.Right}) {
foreach (var width in new double[] { 0.0, 150.0 }) {
DrawText(dc, new Point(400, y), align, width);
y += 25.0;
}
y += 45.0;
}
}

private void DrawText(DrawingContext dc, Point origin,
TextAlignment align, double maxTextWidth) {
var f = new FormattedText(
"This is a text with TextAlignment = " + align.ToString()
+ " and MaxTextWidth = " + maxTextWidth.ToString() + ".",
System.Globalization.CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
new Typeface("Arial"), 12.0, Brushes.Black
) {
TextAlignment = align,
MaxTextWidth = maxTextWidth
};

dc.DrawEllipse(Brushes.Blue, null, origin, 1.0, 1.0);
var correctionX = -maxTextWidth * (align == TextAlignment.Right ? 1.0
: (align == TextAlignment.Center ? 0.5 : 0.0));
origin.Offset(correctionX, 0.0);
dc.DrawEllipse(Brushes.Red, null, origin, 1.0, 1.0);
dc.DrawText(f, origin);
}

关于c# - 设置 MaxTextWidth 时出现 WPF 字对齐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37304017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com