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