2012-08-15 148 views
2

如何增加a的字體,比方說TextBlock?我希望有這樣的事情:如何增加XAML中的字體大小?

<TextBlock FontSize="20"> 
    text 
</TextBlock> 

,因爲當用戶更改字體大小Windows的控件設置,將無法正常工作。我們有類似於+VALUE(例如+2)的東西嗎?

編輯
這就是我的意思說的是Windows的設置: enter image description here

,但我收到的答覆完全滿足我。

+0

你說的「這並不意味着什麼當用戶更改控件'字體大小'的Windows設置時正確工作?我不認爲用戶可以設置單個控件類型的大小(在「高級外觀設置」對話框中沒有任何設置)。他們可以將所有屏幕內容縮放到125%或150%,但WPF會尊重這一點。所以我不確定你在想什麼,你認爲WPF會忽略。 – 2012-08-15 12:28:03

+0

我做了一個編輯來回答你的問題。 – SOReader 2012-08-15 13:20:19

回答

8

WPF不具有EM字體大小,有替代品在回答這個SO

的simplist可能

<ScaleTransform ScaleX="1.2" ScaleY="1.2" /> 
1

首先,你應該創建一個應用程序範圍的樣式You字體如此回答中所述:WPF global font size

然後,您可以將fontsize值綁定到靜態類的屬性中,並根據控制面板中定義的大小對其進行相應調整。

+0

+1感興趣的鏈接 – SOReader 2012-08-15 13:13:11

2

適應鮑勃淡水河谷回答你原來的代碼

<TextBlock> 
    <TextBlock.RenderTransform> 
     <ScaleTransform ScaleX="1.2" ScaleY="1.2" /> 
    </TextBlock.RenderTransform> 
    text 
</TextBlock> 
0

對於那些可憐的靈魂誰找到需要這個問題的相應字號機制設計的目的,如你在CSS中使用,我發現了一個黑客似乎在WPF中工作。

它這樣使用:

<StackPanel> 
    <TextBlock>outer</TextBlock> 
    <ContentControl local:RelativeFontSize.RelativeFontSize="2"> 
     <StackPanel> 
      <TextBlock>inner</TextBlock> 
      <ContentControl local:RelativeFontSize.RelativeFontSize="2"> 
       <StackPanel> 
        <TextBlock>innerest</TextBlock> 
       </StackPanel> 
      </ContentControl> 
     </StackPanel> 
    </ContentControl> 
</StackPanel> 

其中給出這樣的:

screenshot

而這裏的代碼:

public static class RelativeFontSize 
{ 
    public static readonly DependencyProperty RelativeFontSizeProperty = 
     DependencyProperty.RegisterAttached("RelativeFontSize", typeof(Double), typeof(RelativeFontSize), new PropertyMetadata(1.0, HandlePropertyChanged)); 

    public static Double GetRelativeFontSize(Control target) 
     => (Double)target.GetValue(RelativeFontSizeProperty); 

    public static void SetRelativeFontSize(Control target, Double value) 
     => target.SetValue(RelativeFontSizeProperty, value); 

    static Boolean isInTrickery = false; 

    public static void HandlePropertyChanged(Object target, DependencyPropertyChangedEventArgs args) 
    { 
     if (isInTrickery) return; 

     if (target is Control control) 
     { 
      isInTrickery = true; 

      try 
      { 
       control.SetValue(Control.FontSizeProperty, DependencyProperty.UnsetValue); 

       var unchangedFontSize = control.FontSize; 

       var value = (Double)args.NewValue; 

       control.FontSize = unchangedFontSize * value; 

       control.SetValue(Control.FontSizeProperty, unchangedFontSize * value); 
      } 
      finally 
      { 
       isInTrickery = false; 
      } 
     } 
    } 
}