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