2012-04-15 173 views
2

根據窗口大小的不同,我所有的網格都可能很小很大,但是在大網格尺寸下,文本看起來很小。是否可以使字體可縮放?

我現在的想法(但我不知道該如何認識到這一點)是作出具有約束力的所有格子元素,以單個字體,然後通過

override void OnRender(DrawingContext dc) { 

根據窗口大小更改字體大小。

問題是:這個想法是否理智,是否有其他方法?

+0

您的網格元素是否使用不同的字體大小? – 2012-04-15 10:47:48

+0

現在我不指定他們的尺寸,但使用相同的字體大小不一定 – Cynede 2012-04-15 10:51:04

+1

我增加了另一種解決方案,我的答案。 – 2012-04-15 12:30:38

回答

2

如果您沒有明確設置內部元素的字體,它們會繼承父字體。因此,您可以更改其中一個父元素的字體大小(例如Window本身或Grid)。這會更改未明確指定字體大小的所有內部元素的字體大小。

但是,如果您的字體應該是不同的大小,我認爲最好的解決方案是將元素的字體大小綁定到父窗口的字體大小,並使用值轉換器對字體大小進行縮放:

定義值轉換器是這樣的:

using System; 
using System.Windows.Data; 

namespace WPFTest 
{ 
    public class FontSizeConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value == null) 
       return null; 
      double windowFontSize = (double)value; 
      var scale = System.Convert.ToDouble(parameter); 
      return windowFontSize * scale; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

而在XAML中使用它:

<Window x:Class="WPFTest.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:test="clr-namespace:WPFTest" 
     Title="Window1" Height="300" Width="300" FontSize="20" x:Name="window1"> 
    <Window.Resources> 
     <test:FontSizeConverter x:Key="fontSizeConverter"/> 
    </Window.Resources> 
    <Grid> 
     <StackPanel Grid.Row="0" Grid.Column="0"> 
      <TextBlock 
       FontSize="{Binding ElementName=window1, Path=FontSize, Converter={StaticResource ResourceKey=fontSizeConverter}, ConverterParameter=1.5}"> 
       Text 1 
      </TextBlock> 
      <TextBlock FontSize="{Binding ElementName=window1, Path=FontSize, Converter={StaticResource ResourceKey=fontSizeConverter}, ConverterParameter=0.7}"> 
       Text 2 
      </TextBlock> 
      <TextBlock >Text 3</TextBlock> 
     </StackPanel> 
    </Grid> 
</Window> 

ConverterParameter作爲財政e與窗口相關的元素的字體(在綁定的ElementName屬性中指定)。

在此示例中,第一個TextBlock的字體爲窗口字體的150%,第二個TextBlock的字體爲窗口的70%。第三個TextBlock遵循窗口的字體大小。

0

我更喜歡roberther建議的這個解決方案。它更加香氣和乾淨。

<Viewbox> 
    <TextBlock Text="Hello World" /> 
</Viewbox> 
相關問題