WPF версия.ScaleControl?

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


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

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

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

До

После (плохо)

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

После (хорошо)

Поскольку 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 ответа

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

<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;
}

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

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

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

Другие вопросы по тегам