Если вы хотите, чтобы все содержимое масштабировалось (не только текст), вы можете сделать что-то вроде следующего.Предполагая, что ваш верхний уровень управления вашим Window
(с именем MyWindow
) равен Grid
, вот XAML:
<Window.Resources>
<c:WindowWidthToScaleConverter x:Key="WindowWidthToScaleConverter" />
</Window.Resources>
<Grid>
<Grid.LayoutTransform>
<ScaleTransform
ScaleX="{Binding ActualWidth, ElementName=MyWindow, Converter={StaticResource WindowWidthToScaleConverter}}"
ScaleY="{Binding ActualWidth, ElementName=MyWindow, Converter={StaticResource WindowWidthToScaleConverter}}"
/>
</Grid.LayoutTransform>
<!-- Contents -->
</Grid>
Вот преобразователь, который предполагает, что ширина 640 является нормальной (1: 1) масштаб:
public class WindowWidthToScaleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is double width)
return width / 640.0;
return 1.0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
Обновление : Однако при использовании вышеуказанного решения размер шрифта (и элементы управления) только увеличивается , но выигрываетна самом деле не изменить размер шрифта.Если вы просто хотите изменить размер шрифта Label
элементов управления, вы можете сделать следующее в XAML:
<Window.Resources>
<c:WindowWidthToFontSizeConverter x:Key="WindowWidthToFontSizeConverter" />
<Style TargetType="Label">
<Setter
Property="FontSize"
Value="{Binding ActualWidth, ElementName=MyWindow,
Converter={StaticResource WindowWidthToFontSizeConverter}}"
/>
</Style>
</Window.Resources>
<StackPanel>
<Label Content="Name:" />
<TextBox />
</StackPanel>
Преобразователь предполагает, что ширина 640 соответствует размеру шрифта 12,0 и масштабируется соответственно:
public class WindowWidthToFontSizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is double width)
return 12.0 * width / 640.0;
return 12.0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
Вы можете добавить аналогичные ресурсы Style
для масштабирования размеров шрифта других элементов управления.Но даже если элементы управления являются производными от класса Control
, вы не можете определить Style
для всех элементов управления таким образом.Тем не менее, есть обходной путь для этого объясненного здесь .