Если вы не задали шрифт на внутренних элементах явно, они наследуют родительский шрифт. Таким образом, вы можете изменить размер шрифта на одном из родительских элементов (например, 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
следует размеру шрифта окна.
Имеет ли ваши элементы сетки разные размеры шрифта? –
на данный момент я не указываю их размеры, но с использованием одинаковых размеров шрифта необязательно – Cynede
Я добавил еще одно решение для моего ответа. –