gpt4 book ai didi

c# - FormattedText.BuildGeometry 删除字符

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:41 25 4
gpt4 key购买 nike

我正在尝试使用 FormattedText.BuildGeometry 来确定字符的布局方式,以确定鼠标的逻辑位置。在我的上下文中,可以假定 FormattedText 是单行 - 我应该得到一个包含 1 个子元素的几何图形组,每个字符都有一个子几何图形。这是真的,除了对于字符“f”和“t”,在 FormattedText 的文本中重复该字符会导致该行的几何数比文本中的字符数少一个。

示例代码:

var tf = new Typeface(new FontFamily("Calibri"), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
var ft = new FormattedText("ff", CultureInfo.CurrentCulture, FlowDirection.LeftToRight, tf, 14, Brushes.Black);
var g = ft.BuildGeometry(new Point(0, 0));
var gc = (GeometryGroup)((GeometryGroup)g).Children[0];
Debug.Assert(gc.Children.Count == ft.Text.Length, "Expected length of " + ft.Text.Length + " but found " + gc.Children.Count);

您可以将其附加到空 WPF 应用程序中的按钮。

对于包含“ff”或“tt”的任何内容,这将失败。更改字体会改变行为 - 有些字体我还没有找到导致这种情况的字符。

最佳答案

简短的回答是 BuildGeometryglyphs 中思考,不是字符。来自documentation (强调我的):

Returns a Geometry object that represents the formatted text, including all glyphs and text decorations.

在几种字体中,“ff”和“tt”是ligatures , 因此它们由单个字形表示。

参见 this question有关如何做你想做的事情的解释。基本上,BuildHighlightGeometry(Point, int, int) 可以返回单个字符的边界框。您可以遍历边界框并执行 HitTest ,直到找到匹配的字符。

关于c# - FormattedText.BuildGeometry 删除字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9425725/

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