У меня нет ответа на вопрос, почему происходит такое странное поведение. Похоже, что штрихи, созданные Pen
, сопоставлены с декорированным текстом TextDecoration
. Это имеет смысл, поскольку штрихи или TextDecoration
в целом автоматически подстраиваются, например, к размеру шрифта. Символ минус, кажется, производит другое расстояние. Возможно, такое поведение не возникает при использовании моноширинного шрифта.
В любом случае, вы можете создать мозаичный DrawingBrush
и назначить его свойству Pen.Brush
для создания пунктирной линии. Вы можете поиграться с DrawingBrush.ViewPort
, чтобы изменить положение или длину тире.
Viewport
состоит из четырех значений и на самом деле Rect
, который описывает положение тайла иРазмерность: x, y, width, height
. Большие значения ширины и высоты создают более длинные штрихи.
Результатом является равномерное рисование штрихов и пробелов:
<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>
Недостатком этого подхода является то, что размер и положение штрихов больше не являютсяадаптивный к размеру шрифта.