Ответы с форумов MSDN

WPF привязка шрифтов

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

Главная страница - Список тем - Репозиторий на GitHub