Date: 13.05.2019 6:45:18
Использовать привязки для шрифта, конечно же, можно (не к "функции" только, а к свойству). Что до размеров элементов, то подстраивать их в коде под размер шрифта нет необходимости, так как WPF умеет делать это автоматически. Вам нужно спроектировать макет окна без жесткого задавания размеров, и привязать свойство FontSize к вашему классу:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="WpfApp1.MainWindow" Title="MainWindow" Height="400" Width="600" FontSize="{Binding Path=FontSize, Mode=TwoWay}"> <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Label Content="Hello, World" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10" Background="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}" FontFamily="Arial" FontWeight="Bold" /> <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Margin="10" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua" VerticalAlignment="Top" Width="289.076" Background="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"/> <Button Content="Increase font size" HorizontalAlignment="Left" Margin="10" VerticalAlignment="Top" Click="Button_Click"/> </StackPanel> </Window>
using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.ComponentModel; namespace WpfApp1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.DataContext = Params.Instance; } private void Button_Click(object sender, RoutedEventArgs e) { Params.Instance.FontSize++; } } public class Params:INotifyPropertyChanged { int _FontSize=12; public int FontSize { get { return _FontSize; } set { if (value != _FontSize) { _FontSize = value; OnPropertyChanged("FontSize"); } } } Params() { } static Params _instance; void OnPropertyChanged(string prop) { PropertyChangedEventHandler h = PropertyChanged; if (h != null) { h(this, new PropertyChangedEventArgs(prop)); } } public event PropertyChangedEventHandler PropertyChanged; public static Params Instance { get { if (_instance == null) _instance = new Params(); return _instance; } } } }
Автор: VadimTagil