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

如何在WPF中使星号与周围的文本对齐?,wpf,xaml,textbox,Wpf,Xaml,Textbox,我试图让星号与周围的文字/图形垂直排列,而不是在上面 我认为应用负基线偏移量是解决方案,但似乎没有效果 以下是TextBlock.BaselineOffset属性的文档: <TextBlock Name="ReadUnreadIndicator" Grid.Column="0" VerticalAlignment="Center" FontWeight="Bold" FontSize="24" BaselineOffset="-10"

我试图让星号与周围的文字/图形垂直排列,而不是在上面

我认为应用负基线偏移量是解决方案,但似乎没有效果

以下是TextBlock.BaselineOffset属性的文档:

<TextBlock
    Name="ReadUnreadIndicator"
    Grid.Column="0"
    VerticalAlignment="Center"
    FontWeight="Bold"
    FontSize="24"
    BaselineOffset="-10"
    Text="*" />
财产价值 类型:系统。双

每行文本相对于基线的偏移量,以设备无关像素为单位。Double.NaN表示根据当前字体特征自动计算最佳基线偏移量。默认值为Double.NaN

评论

基线是一条假想的水平线,文本>行中每个字符的底部与之对齐

示例标记:

<TextBlock
    Name="ReadUnreadIndicator"
    Grid.Column="0"
    VerticalAlignment="Center"
    FontWeight="Bold"
    FontSize="24"
    BaselineOffset="-10"
    Text="*" />

无论我为BaselineOffset设置了什么,星号总是显示为“上标”

问题:

<TextBlock
    Name="ReadUnreadIndicator"
    Grid.Column="0"
    VerticalAlignment="Center"
    FontWeight="Bold"
    FontSize="24"
    BaselineOffset="-10"
    Text="*" />
  • 为什么基线偏移量对我不起作用?我使用它是错误的还是框架中的错误

  • 如何在不使用边距的情况下向下移动星号(这会在文本块上方产生我不想要的空间)


  • 据我所知,
    TextBlock.BaselineOffset
    只影响另一个
    TextBlock
    内部的
    TextBlock

    <TextBlock>Some text <TextBlock BaseLineOffset="10" Text="*"/></TextBlock>
    
    一些文本
    
    调整
    BaseLineOffset
    允许您相对于“某些文本”垂直移动星号。请注意,
    Double.NaN
    指示的默认
    BaseLineOffset
    与0不同,您可能需要正偏移量,以避免星号向下移动太远


    但是正如您在评论中所指出的,使用
    BaseLineOffset
    并不是一个好的解决方案。问题似乎是星号符号不符合您的喜好。我建议您切换到在WPF中绘制的具有正确位置和外观的自己的图示符,然后使用类似于
    堆栈面板的东西将其放置在文本旁边,以将它们对齐。

    据我所知
    文本块。基线偏移量
    仅影响另一
    文本块内的
    文本块

    <TextBlock>Some text <TextBlock BaseLineOffset="10" Text="*"/></TextBlock>
    
    一些文本
    
    调整
    BaseLineOffset
    允许您相对于“某些文本”垂直移动星号。请注意,
    Double.NaN
    指示的默认
    BaseLineOffset
    与0不同,您可能需要正偏移量,以避免星号向下移动太远


    但是正如您在评论中所指出的,使用
    BaseLineOffset
    并不是一个好的解决方案。问题似乎是星号符号不符合您的喜好。我建议您切换到在WPF中绘制的具有正确位置和外观的标志符号,然后使用类似于
    堆栈面板的东西将其放置在文本旁边,以将其对齐。

    这似乎正确对齐了星号:

    <TextBlock
        Grid.Column="0">
        <TextBlock
            Name="ReadUnreadIndicator"
            BaselineOffset="30"
            FontFamily="Courier New"
            FontSize="24"
            FontWeight="Bold"
            Text="٭" />
    </TextBlock>
    
    
    
    文本
    实际上是一个“阿拉伯五星”(U+066D),而不是一个星号,但它看起来非常相似


    我不知道为什么
    BaselineOffset
    需要为“30”才能正常工作。它显然没有将文本向上移动30个像素——它可能会将文本向上移动2或3个像素。

    这似乎正确地对齐了星号:

    <TextBlock
        Grid.Column="0">
        <TextBlock
            Name="ReadUnreadIndicator"
            BaselineOffset="30"
            FontFamily="Courier New"
            FontSize="24"
            FontWeight="Bold"
            Text="٭" />
    </TextBlock>
    
    
    
    文本
    实际上是一个“阿拉伯五星”(U+066D),而不是一个星号,但它看起来非常相似


    我不知道为什么
    BaselineOffset
    需要为“30”才能正常工作。很明显,它没有将文本向上移动30个像素——它可能会将文本向上移动2或3个像素。

    以下是我的结论:

    <TextBlock
        Name="ReadUnreadIndicator"
        Grid.Column="0"
        Margin="0,5,0,-5"
        FontSize="24"
        FontWeight="Bold"
        Text="*" />
    
    
    

    感谢@Martin&@Gimalay的帮助。

    以下是我最后的收获:

    <TextBlock
        Name="ReadUnreadIndicator"
        Grid.Column="0"
        Margin="0,5,0,-5"
        FontSize="24"
        FontWeight="Bold"
        Text="*" />
    
    
    

    感谢@Martin&@Gimalay的帮助。

    谢谢,这肯定是我第一个问题的正确答案,但它仍然会产生额外的空间,使整个文本块更高。你可以使用边距,如“0,1,0,-1”。谢谢,这肯定是我第一个问题的正确答案,但它仍然会产生额外的空间,使整个文本块更高。您可以使用边距,如“0,1,0,-1”。在您的情况下,默认的
    BaseLineOffset
    可能是33,将其降低到30会将星号稍微向下移动。通过将
    BaseLineOffset
    设置为
    Double.NaN
    从字体计算默认的
    BaseLineOffset
    。0通常不是“中性”或默认值。@Martin,这可以解释。嗯,差不多了。我注意到一件事:将
    基线偏移量设置为0到25之间的任意位置,并且没有任何效果。然而,即使很小的负基线偏移量也会产生影响。你能解释一下为什么会这样吗?在你的例子中,默认的
    BaseLineOffset
    可能是33,将其降低到30会使星号稍微向下移动。通过将
    BaseLineOffset
    设置为
    Double.NaN
    从字体计算默认的
    BaseLineOffset
    。0通常不是“中性”或默认值。@Martin,这可以解释。嗯,差不多了。我注意到一件事:将
    基线偏移量设置为0到25之间的任意位置,并且没有任何效果。然而,即使很小的负基线偏移量也会产生影响。你能解释一下为什么会这样吗?