我正在尝试在DateTime
中显示格式类似于2019-10-07 17:00
的TextBlock
。文本应带有下划线和虚线。为此,我使用以下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>
但是,这会产生一些非常出乎意料的结果,其中每个连字符似乎导致虚线下划线重新开始其渲染。请注意,在每个连字符之后,破折号模式看起来几乎是随机的。
如果我将看起来非常相似(-与-的“-负号-连字符”更改为“不间断-连字符”,则渲染将按预期工作。
<TextBlock Text="2019‐10‐07 17:00" ...>
每次我在文本中添加减号-连字符,但没有找到其他任何字符时,就会出现带下划线的错误的渲染。有没有其他人注意到这一点,并且有人有解决方案吗?如果不是,那么这种奇怪行为的原因可能是什么?
鉴于您的格式,大小应始终大致相同,因此您可以像这样使用另一个文本块,然后将其覆盖在另一个框中
<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" />
我对为什么这种奇怪的行为没有答案。看起来Pen
创建的破折号已映射到TextDecoration
的修饰文字。这是有道理的,因为破折号或TextDecoration
通常会自动调整为例如字体大小。减号似乎会产生不同的间距。使用等宽字体时,也许不会发生这种现象。
这可能是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>
方法及其注释: