使用带下划线的TextDecorations在TextBlock中显示日期时间

问题描述 投票:0回答:3

我正在尝试在DateTime中显示格式类似于2019-10-07 17:00TextBlock。文本应带有下划线和虚线。为此,我使用以下xaml

<TextBlock Text="2019-10-07 17:00">
    <TextBlock.TextDecorations>
        <TextDecoration Location="Underline">
            <TextDecoration.Pen>
                <Pen Brush="Black">
                    <Pen.DashStyle>
                        <DashStyle Dashes="5"/>
                    </Pen.DashStyle>
                </Pen>
            </TextDecoration.Pen>
        </TextDecoration>
    </TextBlock.TextDecorations>
</TextBlock>

但是,这会产生一些非常出乎意料的结果,其中每个连字符似乎导致虚线下划线重新开始其渲染。请注意,在每个连字符之后,破折号模式看起来几乎是随机的。

enter image description here

如果我将看起来非常相似(-与-的“-负号-连字符”更改为“不间断-连字符”,则渲染将按预期工作。

<TextBlock Text="2019‐10‐07 17:00" ...>

enter image description here

每次我在文本中添加减号-连字符,但没有找到其他任何字符时,就会出现带下划线的错误的渲染。有没有其他人注意到这一点,并且有人有解决方案吗?如果不是,那么这种奇怪行为的原因可能是什么?

enter image description here

c# .net wpf xaml textblock
3个回答
0
投票

鉴于您的格式,大小应始终大致相同,因此您可以像这样使用另一个文本块,然后将其覆盖在另一个框中

<TextBlock Text="This is a really lon" Foreground="Transparent" IsHitTestVisible="False">
    <TextBlock.TextDecorations>
        <TextDecoration Location="Underline">
            <TextDecoration.Pen>
                <Pen Brush="Black">
                    <Pen.DashStyle>
                        <DashStyle Dashes="5"/>
                    </Pen.DashStyle>
                </Pen>
            </TextDecoration.Pen>
        </TextDecoration>
    </TextBlock.TextDecorations>
</TextBlock>
<TextBlock Text="2019-10-07 17:00" />

0
投票

我对为什么这种奇怪的行为没有答案。看起来Pen创建的破折号已映射到TextDecoration的修饰文字。这是有道理的,因为破折号或TextDecoration通常会自动调整为例如字体大小。减号似乎会产生不同的间距。使用等宽字体时,也许不会发生这种现象。


0
投票

这可能是WPF标志符号呈现代码中出现一些奇怪的破译的结果。在.NET源代码中,您会找到<TextBlock Text="2019-10-07 17:00"> <TextBlock.TextDecorations> <TextDecoration Location="Underline"> <TextDecoration.Pen> <Pen> <Pen.Brush> <DrawingBrush Viewport="0,0,10,10" ViewportUnits="Absolute" TileMode="Tile"> <DrawingBrush.Drawing> <GeometryDrawing Brush="Black"> <GeometryDrawing.Geometry> <GeometryGroup> <RectangleGeometry Rect="0,0,5,5" /> <RectangleGeometry Rect="5,5,5,5" /> </GeometryGroup> </GeometryDrawing.Geometry> </GeometryDrawing> </DrawingBrush.Drawing> </DrawingBrush> </Pen.Brush> </Pen> </TextDecoration.Pen> </TextDecoration> </TextBlock.TextDecorations> </TextBlock> 方法及其注释:

© www.soinside.com 2019 - 2024. All rights reserved.