2016-12-14 62 views
0

中的翼形字符我试图在控件中使用Wingdings符号作为图形,并试图使其在文本框(UWP应用程序)中垂直居中。在它周围放置一个可见的边框,并且该符号不是垂直居中的事实是显而易见的,并且毁了我要去的东西。如果可能的话,它可以使我不必进行自定义艺术创作,而且由于Wingdings可以调整大小,因此我的图形可以轻松地重新调整大小。这就是为什么我不想手动调整高度,直到它看起来居中。如何垂直居中文本块xaml/C#/ UWP

大多数Wingdings不是垂直居中,但有时用作图形,所以我想知道如果这是可行的W /合理的努力。一个光滑的xaml方式来做到这一点是理想的,但字体度量测量,然后文本块高度调整粘性将是很好的。

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

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

编辑 - 改变例子来简化房间和使用宋体硬盘符号,因为颅骨骨骼&足够接近垂直居中混淆的问题。驱动符号非常明显不是垂直居中。即使字体大小发生变化,我的目标也是自动垂直居中。我可以看到XAML可能无法做到这一点,但我想知道是否有一些字体/文本指标查询存在,我可以用它来做到这一点。

EDIT 2 - 添加图片(从上面XAML具有相同的问题,因为所有建议的XAML(S):

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

回答

0

颅骨骨骼&不垂直居中的边界。

其实默认情况下骨骼文字应该是垂直居中的&。您的代码为什么看起来不垂直的原因是字体大小太大而不能在边框内,因为边框的高度限制为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 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" /> 
    
+0

感谢Sunteen,你的第一个答案似乎缺少一个VerticalAlignment =“中心”,但既不1,2或3是垂直居中的字符。因为它不是垂直对称的,我选择了一个头骨和骨头的坏例子。如果将字符更改为“µ”,并测量顶部和底部边界之间的像素到符号,您会发现它不是以上述任何建议中的垂直居中。我不认为font-char是垂直居中的。举一个极端的例子来看看“;”,它绝对不是垂直居中。有没有一种字体/文字指标的方式来做到这一点? – br0therDave

+0

@ br0therDave我测试过“µ”,这三种方法都可以使它居中。如果您仍然遇到问题,请提供您的应用目标版本和测试环境。并提供您通过上面的代码获得的屏幕截图。 –

+0

我给这个问题添加了一张图片。您可以看到wingdings符号的中心不在文本块的垂直中心。关于如何让符号垂直居中的任何想法? – br0therDave