メイン ウィンドウに含まれるウィンドウ、ツリー ビュー、リボン メニューなどのコントロールのフォント サイズを増減したい。
フォント サイズ スライダー作成メソッドがあり、visualtree ヘルパーを使用して Control と TextBlock のすべてにアクセスし、スライダーの値に応じてフォント サイズを増減したいと考えています。
メソッドは以下のとおりです。
private StackPanel CreateFontSizeSlider()
{
StackPanel fontSizePanel = new StackPanel();
fontSizePanel.Orientation = Orientation.Horizontal;
Slider fontSizeSlider = new Slider();
fontSizeSlider.Minimum = -3;
fontSizeSlider.Maximum = 5;
fontSizeSlider.Value = 0;
fontSizeSlider.Orientation = Orientation.Horizontal;
fontSizeSlider.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.TopLeft;
fontSizeSlider.IsSnapToTickEnabled = true;
fontSizeSlider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(fontSizeSlider_ValueChanged);
fontSizeSlider.Width = 150;
fontSizePanel.Children.Add(fontSizeSlider);
return fontSizePanel;
}
public static void ChangeControlsFontSize(DependencyObject dependencyObject, double value)
{
foreach (DependencyObject childItem in GetChildren(dependencyObject))
{
if (childItem is Control)
{
Control control = childItem as Control;
control.FontSize = control.FontSize + value;
}
else if (childItem is TextBlock)
{
((TextBlock)childItem).FontSize = ((TextBlock)childItem).FontSize + value;
}
ChangeControlsFontSize(childItem, value);
}
}
private static IEnumerable<DependencyObject> GetChildren(DependencyObject reference)
{
int childCount = VisualTreeHelper.GetChildrenCount(reference);
for (int i = 0; i < childCount; i++)
{
yield return VisualTreeHelper.GetChild(reference, i);
}
}
private void fontSizeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
ChangeControlsFontSize(this, e.NewValue - e.OldValue);
}
いくつかの問題があります。
まず、ビジュアル ツリーを歩いてすべてのコントロールにアクセスできません。たとえば、閉じたリボン メニュー項目にアクセスできません。そのため、フォントを変更することはできません。
次に、一部のコントロールには別のコントロールが含まれているため、コントロールのフォント サイズを 2 回増減します。
これらの問題の解決策はありますか、またはこれを行う別の方法はありますか? 私を手伝ってくれますか ?