developer tip

WPF 전역 글꼴 크기

optionbox 2020. 11. 16. 08:09
반응형

WPF 전역 글꼴 크기


WPF 앱을 만들고 있는데 UI의 모든 요소에 대한 글꼴 크기를 변경할 수있는 가장 좋은 방법을 알고 싶습니다. 리소스 사전을 만들고 사용하는 모든 컨트롤의 글꼴 크기를 설정하도록 스타일을 설정합니까?

모범 사례는 무엇입니까?


나는 이렇게 할 것입니다.

<Window.Resources>
        <Style TargetType="{x:Type Control}" x:Key="baseStyle">
            <Setter Property="FontSize" Value="100" />
        </Style>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type Label}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type ListView}" BasedOn="{StaticResource baseStyle}"></Style>
        <!-- ComboBox, RadioButton, CheckBox, etc... -->
    </Window.Resources>

이렇게하면 모든 컨트롤을 변경하려면 "baseStyle"스타일 만 변경하면되고 나머지는 그대로 상속됩니다. (이것이 바로 BasedOn 속성입니다. 상속 된 스타일 내부에 다른 setter를 만들면 기본 스타일을 확장 할 수도 있습니다.)


FontSizeProperty는 부모 컨트롤에서 상속됩니다. 따라서 메인 창의 FontSize를 변경하기 만하면됩니다.

동적 동작이 필요하지 않은 경우 다음이 작동합니다.

ResourceDictionary에 Window 스타일 추가

<Style TargetType="{x:Type Window}">
     <Setter Property="FontSize" Value="15" />
</Style>

기본 양식에 스타일 적용 (파생 유형이므로 암시 적으로 적용되지 않음)

 Style = (Style)FindResource(typeof (Window));

또 다른 옵션은 FontFamily 및 FontSize를 리소스로 정의하는 것입니다.

<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily>
<sys:Double x:Key="BaseFontSize">12</sys:Double>

그렇게하면 setter에서 사용할 수 있습니다.


<Window> FontSize 속성이 있습니다.

따라서 해당 창 내의 모든 요소에서 글꼴 크기를 변경하려는 경우 요소에서 원하는 글꼴 크기를 설정할 수 있습니다.

<Window FontSize="12">

</Window>

Application.Current.MainWindow.FontSize = _appBodyFontSize;

이렇게하면 런타임에도 글꼴 크기를 변경할 수 있습니다.


TextElement.FontSize 상속 속성입니다. 즉, 루트 요소에서 글꼴 크기를 간단히 설정할 수 있으며 모든 자식 요소는 해당 크기를 사용합니다 (수동으로 변경하지 않는 한).


WPF의 모든 스타일에 대해 앱의 스타일이 포함 된 별도의 리소스 사전이 있어야합니다.

앱 전체에서 재사용되는 단일 글꼴 크기를 원한다면 해당 글꼴 크기에 대한 스타일을 만드십시오. 명시 적으로 사용할 고유 한 이름 / 키를 제공하거나 앱 전체에서 초월 할 targetType을 설정할 수 있습니다.

명시 적 키 :

<Style
    x:Key="MyFontSize"
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
</Style>

<Control
    Style="{StaticResource MyFontSize}" />

*이 스타일은 contentPresenters가있는 컨트롤과 함께 사용할 수 있습니다.

앱의 모든 텍스트 블록 :

<Style
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
</Style>

<TextBlock
        Text="This text will be size 10" />

모든 창에 한 번 적용되도록 정적으로 (XAML)가 아닌 전역 FontSize를 프로그래밍 방식으로 변경해야하는 경우 다음을 수행 할 수 있습니다.

TextElement.FontSizeProperty.OverrideMetadata(
            typeof(TextElement),
            new FrameworkPropertyMetadata(16.0));

        TextBlock.FontSizeProperty.OverrideMetadata(
            typeof(TextBlock),
            new FrameworkPropertyMetadata(16.0));

이 값은 모든 TextBlock, Labels 및 모든 창의 거의 모든 텍스트에 적용되지만 명시적인 FontSize가 정의되어 있지 않습니다. 그러나 이것은 TextBox에 영향을 미치지 않으므로 유사한 코드를 작성하거나 다른 특수 컨트롤을 작성해야합니다.


Ctrl- 마우스 휠을 사용하여 글꼴 크기를 전역 적으로 동적으로 변경하려면 :

XAML :

<Window Name="MainWindow" ... PreviewMouseWheel="MainWindow_PreviewMouseWheel">

뒤에 코드 :

private void MainWindow_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    if ((Keyboard.Modifiers & ModifierKeys.Control) != 0)
    {
        if (e.Delta > 0)
            ++mainCtrl.FontSize;
        if (e.Delta < 0 && mainCtrl.FontSize > 1)
             --mainCtrl.FontSize;
    }
}

참고URL : https://stackoverflow.com/questions/893428/wpf-global-font-size

반응형