如何在WPF中将星号与周围文本对齐?

时间:2009-10-18 20:15:13

标签: wpf xaml textbox

我正在尝试使用周围的文本/图形而不是在其上方垂直排列星号。

我认为应用负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投放什么,星号总是显示为“上标”。

问题:

  1. 为什么BaselineOffset不适合我?我使用它是错误的还是框架中的错误?

  2. 如何在不使用边距的情况下向下移动星号(这会在TextBlock上方创建我不想要的空间)?

3 个答案:

答案 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个像素。