WPF версия .ScaleControl? - PullRequest
       40

WPF версия .ScaleControl?

2 голосов
/ 19 июня 2011

Что такое WPF-версия Control.ScaleControl?


Я пытаюсь удовлетворить предпочтения шрифта пользователя, установив для шрифта IconTitleFont :

private void ApplyUserFontPreferences()
{
   this.FontFamily = SystemFonts.IconFontFamily;
   this.FontSize = SystemFonts.IconFontSize;
   this.FontStyle = SystemFonts.IconFontStyle;
   this.FontWeight = SystemFonts.IconFontWeight;
}

В отличие от WinForms, содержимое формы не масштабируется с изменением шрифта:

До
enter image description here

После (плохо)
enter image description here

В действительности все элементы управления в форме (включая размер кнопок, ширину столбцов списка и т. Д.) Должны масштабироваться в соответствии сновый макет:

После (хорошо)
enter image description here

Поскольку WPF не ( в отличие от WinForms ) реагирует на размеры шрифтаизменения, я собирался обойти проблему, пытаясь самостоятельно масштабировать форму WPF, используя гипотетическую версию WPF ScaleControl:

private void ApplyUserFontPreferences()
{
   Double scaleFactor = (SystemFonts.IconFontSize / this.FontSize); //i.e. new / old
   this.ScaleControl(scaleFactor); //doesn't exist

   this.FontFamily = SystemFonts.IconFontFamily;
// this.FontSize = SystemFonts.IconFontSize;
   this.FontStyle = SystemFonts.IconFontStyle;
   this.FontWeight = SystemFonts.IconFontWeight;
}

Еще один пример желаниямасштабировать элемент управления (и все дочерние элементы управления) - это когда мне нужно масштабировать элемент управления (и все дочерние элементы управления), чтобы он соответствовал заданному размеру.В этом случае я не хочу масштабировать всю форму, я хочу масштабировать только определенный элемент управления.

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Как насчет этого решения

<Window
   x:Class="WpfApplication1.MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   FontSize="40"
   Loaded="Window_Loaded"
   SizeToContent="WidthAndHeight"
   Title="MainWindow">

   <Grid x:Name="LayoutRoot" Width="525" Height="350">
      <Button Width="300" Height="60" Content="Hello world"/>
      <Grid.LayoutTransform>
         <ScaleTransform x:Name="scaleTransform"/>
      </Grid.LayoutTransform>
   </Grid>
</Window>

И в коде позади

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    ApplyUserFontPreferences();
}

private void ApplyUserFontPreferences(){ 
    Double scaleFactor = (SystemFonts.IconFontSize / this.FontSize);

    this.scaleTransform.ScaleX = scaleFactor;
    this.scaleTransform.ScaleY = scaleFactor;       

    this.FontFamily = SystemFonts.IconFontFamily; 
    this.FontStyle = SystemFonts.IconFontStyle;
    this.FontWeight = SystemFonts.IconFontWeight;
}
0 голосов
/ 20 июня 2011

Я не уверен, что он точно соответствует тому, что вы ищете, но WPF включает автоматическое управление масштабированием: Viewbox .

Это немного жестко, так что YMMV. В конце концов, вы, вероятно, обнаружите, что вам нужен более точный контроль, поэтому вам придется позаботиться о разработке шаблонов и так далее. Однако Viewbox предоставит вам некоторые базовые функции масштабирования.

См. Также: Независимость разрешения в WPF

...