如何在文本块xaml / C#/ UWP

时间:2016-12-14 22:22:11

标签: c# xaml uwp uwp-xaml

我正在尝试使用Wingdings符号作为控件中的图形,并尝试使其在文本框(UWP应用程序)中垂直居中。我正在围绕它放置一个可见的边界,并且符号是没有垂直居中是明显的,破坏了我想要的。如果有可能它可以让我免于必须做自定义艺术,而且由于Wingdings可以调整大小,我的图形可以稍微轻松地重新缩放。这就是为什么我不想手动调整高度直到它看起来居中。

大多数Wingdings不是垂直居中的,但有时用作图形,所以我想知道这是否可行,并且合理的努力。一个光滑的xaml方式是理想的,但字体度量测量,然后文本块高度调整大头钉将是好的。

这是问题的一个例子。硬盘驱动器符号不在边框中垂直居中。

    <Border BorderBrush="Black" BorderThickness="10"  Background="White" HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock Text="&#x3b;" FontFamily="Wingdings" FontSize="230"/>
    </Border>

编辑 - 将示例改为declutter并使用Wingdings硬盘符号,因为头骨和骨骼足够接近垂直居中以混淆问题。驱动符号非常明显不是垂直居中的。我的目标是在字体大小改变时自动垂直居中。我可以看到XAML可能无法做到这一点,但我想知道是否存在一些我可以使用的字体/文本度量查询。

编辑2 - 添加图片(来自上面的XAML,其中包含与所有建议的XAML相同的问题:

我试图让符号的中心位于文本块的中心 I'm trying to get the center of the symbol to be at the center of the textblock

1 个答案:

答案 0 :(得分:0)

  

头骨&amp;骨骼不在边框中垂直居中。

实际上,默认情况下,头骨和骨骼文本应垂直居中。代码使其不垂直的原因是字体大小太大而不能在边框内,因为Border的高度限制为200。因此,TextBlock的超出部分你看不到它可能看起来不是垂直居中的。

  

如何在文本块xaml / C#/ UWP

中垂直居中

有几种方法可以做到这一点,选择哪种方式取决于您的喜好。

  1. 删除Border控件的高度和宽度属性,您将看到文本垂直居中。

    <Border BorderBrush="Black" BorderThickness="10" Background="White"  HorizontalAlignment="Center"> 
       <TextBlock x:Name="textBlock"   Text="N" FontFamily="Wingdings"  FontSize="230"  />
    </Border>
    
  2. 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>
    
  3. 只需使用TextBox控件而不是BorderTextBlock的组件。这将达到相同的效果,使文本始终居中,无论字体大小是多少。注意不要为TextBox设置固定的高度和宽度,也要使TextBox只读。代码如下:

    <TextBox
      x:Name="textBox"
      HorizontalAlignment="Center"
      VerticalAlignment="Center"    
      BorderBrush="Black"
      BorderThickness="10"
      FontFamily="Wingdings"
      FontSize="230"
      IsReadOnly="True"
      Text="N"
      TextAlignment="Center" />