代码之家  ›  专栏  ›  技术社区  ›  devuxer

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

  •  1
  • devuxer  · 技术社区  · 16 年前

    我试图使星号与周围的文本/图形垂直对齐,而不是在上面。

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

    以下是textBlock.baselineoffset属性的文档:

    属性值 类型:System.Double

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

    评论

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

    样本标记:

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

    无论我用什么表示基线偏移量,星号总是显示“上标”。

    问题:

    1. 为什么baselineoffset对我不起作用?我使用它是错误的还是框架中的错误?

    2. 如何在不使用边距的情况下向下移动星号(这将在不需要的文本块上方创建空间)?

    3 回复  |  直到 16 年前
        1
  •  6
  •   Martin Liversage    16 年前

    据我所知 TextBlock.BaselineOffset 只影响一个 TextBlock 在另一个里面 控件 :

    <TextBlock>Some text <TextBlock BaseLineOffset="10" Text="*"/></TextBlock>
    

    调整 BaseLineOffset 允许您相对于“某些文本”垂直移动星号。注意,默认 比较基准偏移量 由指示 Double.NaN 与0不同,您可能需要一个正偏移量来避免星号向下移动太远。

    但正如您在评论中使用 基线偏移 不是一个好的解决方案。问题似乎是星号标志符号没有按您的喜好放置。我建议您切换到在WPF中绘制的具有适当位置和外观的标志符号,而不是使用类似于 StackPanel 把他们排成一行。

        2
  •  2
  •   devuxer    16 年前

    我最终的目的是:

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

    感谢@martin&gimalay的帮助。

        3
  •  0
  •   devuxer    16 年前

    这似乎正确对齐了星号:

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