我正在尝试使用周围的文本/图形而不是在其上方垂直排列星号。
我认为应用负BaselineOffset将是解决方案,但它似乎没有效果。
以下是TextBlock.BaselineOffset属性的文档:
物业价值 键入:System.Double
每行文本在基于设备的像素中偏离基线的量。 Double.NaN表示从当前字体特征自动计算最佳基线偏移。默认值为Double.NaN。
说明
基线是假想的水平线,其中每个字符的基数在>中。文本行已对齐。
示例加价:
<TextBlock
Name="ReadUnreadIndicator"
Grid.Column="0"
VerticalAlignment="Center"
FontWeight="Bold"
FontSize="24"
BaselineOffset="-10"
Text="*" />
无论我为BaselineOffset投放什么,星号总是显示为“上标”。
问题:
为什么BaselineOffset不适合我?我使用它是错误的还是框架中的错误?
如何在不使用边距的情况下向下移动星号(这会在TextBlock上方创建我不想要的空间)?
答案 0 :(得分:6)
据我所知,TextBlock.BaselineOffset
仅影响另一个TextBlock
内的TextBlock
:
<TextBlock>Some text <TextBlock BaseLineOffset="10" Text="*"/></TextBlock>
调整BaseLineOffset
允许您相对于“某些文本”垂直移动星号。请注意,BaseLineOffset
指示的默认Double.NaN
与0不同,您可能需要一个正偏移量,以避免将星号移得太远。
但正如您在评论中指出的使用BaseLineOffset
并不是一个好的解决方案。问题似乎是星号字形不符合您的喜好。我建议您切换到自己在WPF中绘制的字形,并使用正确的位置和外观,然后使用StackPanel
之类的内容将其放在文本旁边以排列它们。
答案 1 :(得分:2)
这就是我最终的目标:
<TextBlock
Name="ReadUnreadIndicator"
Grid.Column="0"
Margin="0,5,0,-5"
FontSize="24"
FontWeight="Bold"
Text="*" />
感谢@Martin&amp; @Gimalay寻求帮助。
答案 2 :(得分:0)
这似乎可以正确对齐星号:
<TextBlock
Grid.Column="0">
<TextBlock
Name="ReadUnreadIndicator"
BaselineOffset="30"
FontFamily="Courier New"
FontSize="24"
FontWeight="Bold"
Text="٭" />
</TextBlock>
Text
实际上是一个“阿拉伯五角星”(U + 066D)而不是星号,但它看起来非常相似。
我不知道为什么BaselineOffset
需要“30”才能正常工作。它显然没有将文本向上移动30个像素 - 它可能会向上移动2或3个像素。