wpf – Wavy强调TextDecoration:我做错了什么?

wpf – Wavy强调TextDecoration:我做错了什么?,第1张

概述我想使用TextDecoration创建 wavy underlines(在类似于RichTextBox的控件中). 我做了以下事情: private static Pen CreateErrorPen() { var geometry = new StreamGeometry(); using (var context = geometry.Open()) { c 我想使用Textdecoration创建 wavy underlines(在类似于RichTextBox的控件中).

我做了以下事情:

private static Pen CreateErrorPen() {    var geometry = new StreamGeometry();    using (var context = geometry.open()) {        context.Beginfigure(new Point(0.0,0.0),false,false);        context.polylineto(new[] {            new Point(0.75,0.75),new Point(1.5,new Point(2.25,new Point(3.0,0.0)        },true,true);    }    var brushPattern = new GeometryDrawing {        Pen = new Pen(Brushes.Red,0.2),Geometry = geometry    };    var brush = new DrawingBrush(brushPattern) {        TileMode = TileMode.Tile,VIEwport = new Rect(0.0,1.5,9.0,3.0),VIEwportUnits = BrushMapPingMode.absolute    };    var pen = new Pen(brush,3.0);    pen.Freeze();    return pen;}

这几乎可以工作,但根据文本中带下划线的单词位置,下划线通常显示为几个叠加波的模式.即使它们是正确的,下划线也有点模糊(我认为在像素之间画画时会出现问题).

我的解决方案是一种反复试验,所以我可能走错了路,尤其是VIEwport / VIEwportUnits.

我做错了什么,是否有办法获得清晰的下划线?

提前致谢.

解决方法 bstoney有一个解决这个问题的方法 here.关键似乎是设置VIEwBox和VIEwport,使波浪垂直分离,所以你只能在下划线中获得1.

波浪中有一些中断可以通过向右延伸并更改VIEwBox来消除,因此它从X = 1而不是0开始:

<VisualBrush x:Key="WavyBrush" TileMode="Tile" VIEwBox="1,3,3" VIEwBoxUnits="absolute" VIEwport="0,-1,6,4" VIEwportUnits="absolute">    <VisualBrush.Visual>        <Path Data="M 0,1 C 1,0 2,2 3,1 4,0 5,2 6,1" stroke="Red" strokeThickness="0.2"/>    </VisualBrush.Visual></VisualBrush>
总结

以上是内存溢出为你收集整理的wpf – Wavy强调TextDecoration:我做错了什么?全部内容,希望文章能够帮你解决wpf – Wavy强调TextDecoration:我做错了什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1071410.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存