2016-12-14 128 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