我正在尝试使用Wingdings符号作为控件中的图形,并尝试使其在文本框(UWP应用程序)中垂直居中。我正在围绕它放置一个可见的边界,并且符号是没有垂直居中是明显的,破坏了我想要的。如果有可能它可以让我免于必须做自定义艺术,而且由于Wingdings可以调整大小,我的图形可以稍微轻松地重新缩放。这就是为什么我不想手动调整高度直到它看起来居中。
大多数Wingdings不是垂直居中的,但有时用作图形,所以我想知道这是否可行,并且合理的努力。一个光滑的xaml方式是理想的,但字体度量测量,然后文本块高度调整大头钉将是好的。
这是问题的一个例子。硬盘驱动器符号不在边框中垂直居中。
<Border BorderBrush="Black" BorderThickness="10" Background="White" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text=";" FontFamily="Wingdings" FontSize="230"/>
</Border>
编辑 - 将示例改为declutter并使用Wingdings硬盘符号,因为头骨和骨骼足够接近垂直居中以混淆问题。驱动符号非常明显不是垂直居中的。我的目标是在字体大小改变时自动垂直居中。我可以看到XAML可能无法做到这一点,但我想知道是否存在一些我可以使用的字体/文本度量查询。
编辑2 - 添加图片(来自上面的XAML,其中包含与所有建议的XAML相同的问题:
答案 0 :(得分:0)
头骨&amp;骨骼不在边框中垂直居中。
实际上,默认情况下,头骨和骨骼文本应垂直居中。代码使其不垂直的原因是字体大小太大而不能在边框内,因为Border的高度限制为200
。因此,TextBlock
的超出部分你看不到它可能看起来不是垂直居中的。
如何在文本块xaml / C#/ UWP
中垂直居中
有几种方法可以做到这一点,选择哪种方式取决于您的喜好。
删除Border
控件的高度和宽度属性,您将看到文本垂直居中。
<Border BorderBrush="Black" BorderThickness="10" Background="White" HorizontalAlignment="Center">
<TextBlock x:Name="textBlock" Text="N" FontFamily="Wingdings" FontSize="230" />
</Border>
在TextBlock
控件之外添加ViewBox
控件。 ViewBox
可以伸展和缩放单个孩子以填充可用空间。无论字体大小多大,这都会使您的文本始终保持中心。文本大小取决于Border
控件的大小。代码如下:
<Border BorderBrush="Black" BorderThickness="10" Height="200" Width="175" Background="White" >
<Viewbox>
<TextBlock x:Name="textBlock" Text="N" FontFamily="Wingdings" FontSize="230" />
</Viewbox>
</Border>
只需使用TextBox
控件而不是Border
和TextBlock
的组件。这将达到相同的效果,使文本始终居中,无论字体大小是多少。注意不要为TextBox
设置固定的高度和宽度,也要使TextBox
只读。代码如下:
<TextBox
x:Name="textBox"
HorizontalAlignment="Center"
VerticalAlignment="Center"
BorderBrush="Black"
BorderThickness="10"
FontFamily="Wingdings"
FontSize="230"
IsReadOnly="True"
Text="N"
TextAlignment="Center" />