これは古い投稿であることは知っていますが、トピックを検索したときに最初に出てきたものの1つだったので、これが私の解決策です。
私は最近、テキストボックスを操作し、画面に対してコンテンツのフォントサイズをスケーリングするプロジェクトでこれを行いました。このために、整数値を設定し、フォントサイズをバインドしました。
私の場合、画面の高さは800x650から始まり、フォントをデフォルトでサイズ12にしたかったので、整数値(_ScaledFontSize)をWindowHeight /(650/12)に設定しました。
画面サイズが変更されるたびに、フォントサイズを再計算する関数が呼び出され、プロパティ変更イベントが呼び出されます。この関数では、次のような単純なものを使用して、最小および最大フォントサイズの制約を追加できます。
//Set a minimum font size
if(_ScaledFontSize < 12)
_ScaledFontSize = 12;
このスケーリングされたサイズを適用するには、フォントサイズをスケーリングするすべてのコントロールをScaledFontSizeプロパティにバインドする必要があります。
最終結果:
アプリケーション起動時のテキスト
約1920x1080のテキスト(フルスクリーンではないため、少し小さくなります)
私はしばらくの間このようなものを見つけるのに苦労していました、そして結局これは私が行ったものです。幸い、コードは非常に単純です
。MainWindow.xaml.cs:
using System.Windows;
using System.ComponentModel;
namespace FontScaling
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
private int _ScaledFontSize;
public int ScaledFontSize
{
get => _ScaledFontSize;
set => _ScaledFontSize = value;
}
public void PropChange(string name)
{
System.ComponentModel.PropertyChangedEventArgs propertyChangedEvt = new System.ComponentModel.PropertyChangedEventArgs(name);
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, propertyChangedEvt);
}
}
public MainWindow()
{
InitializeComponent();
_ScaledFontSize = (int)Application.Current.MainWindow.Height / 54;
}
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
_ScaledFontSize = (int)Application.Current.MainWindow.ActualHeight / 54;
PropChange("ScaledFontSize");
}
}
}
MainWindow.xaml:
<Window x:Class="FontScaling.MainWindow"
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"
xmlns:local="clr-namespace:FontScaling"
mc:Ignorable="d"
Title="MainWindow" Height="650" Width="800"
SizeChanged="Window_SizeChanged"
Name="_This">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="10*"/>
<RowDefinition Height="10*"/>
<RowDefinition Height="10*"/>
<RowDefinition Height="200*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="15*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="15*"/>
</Grid.ColumnDefinitions>
<TextBlock
VerticalAlignment="Bottom"
Grid.Row="1"
Grid.Column="1"
Text="Non Scaled TextBlock"/>
<TextBox
Grid.Row="2"
Grid.Column="1"
Text="Non Scaled Text"/>
<TextBlock
VerticalAlignment="Bottom"
Grid.Row="1"
Grid.Column="3"
Text="Scaled TextBlock"
FontSize="{Binding ScaledFontSize, ElementName=_This}"/>
<TextBox
Grid.Row="2"
Grid.Column="3"
Text="Scaled TextBox"
FontSize="{Binding ScaledFontSize, ElementName=_This}"/>
</Grid>
</Window>