如何在WPF中使星号与周围的文本对齐?
我试图让星号与周围的文字/图形垂直排列,而不是在上面 我认为应用负基线偏移量是解决方案,但似乎没有效果 以下是TextBlock.BaselineOffset属性的文档:如何在WPF中使星号与周围的文本对齐?,wpf,xaml,textbox,Wpf,Xaml,Textbox,我试图让星号与周围的文字/图形垂直排列,而不是在上面 我认为应用负基线偏移量是解决方案,但似乎没有效果 以下是TextBlock.BaselineOffset属性的文档: <TextBlock Name="ReadUnreadIndicator" Grid.Column="0" VerticalAlignment="Center" FontWeight="Bold" FontSize="24" BaselineOffset="-10"
<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之间的任意位置,并且没有任何效果。然而,即使很小的负基线偏移量也会产生影响。你能解释一下为什么会这样吗?