문제

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"스타일을 변경해야합니다. 나머지는 단지 상속합니다. (기반이되는 속성입니다. 상속 스타일 내부에 다른 세터를 만들면 기본 스타일을 확장 할 수도 있습니다).

다른 팁

FontSizeProperty는 부모 통제로부터 상속됩니다. 따라서 메인 창의 글꼴 크기를 변경하면됩니다.

동적 동작이 필요하지 않으면 작동해야합니다.

Resourcedictionary에 창에 스타일을 추가하십시오

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

기본 형식에 스타일을 적용합니다 (파생 유형이기 때문에 암시 적으로 적용되지 않음).

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

또 다른 옵션은 글꼴 패밀리 및 글꼴 크기를 리소스로 정의하는 것입니다.

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

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

<Window> 속성 글꼴 크기가 있습니다.

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

<Window FontSize="12">

</Window>
Application.Current.MainWindow.FontSize = _appBodyFontSize;

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

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

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

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

명시 적 키 :

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

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

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

앱의 모든 텍스트 블록의 경우 :

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

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

모든 창에 한 번 적용하려면 정적으로 (XAML)가 아닌 글로벌 글꼴 크기를 프로그래밍 방식으로 변경 해야하는 경우 다음을 수행 할 수 있습니다.

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

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

이 값은 모든 텍스트 블록, 레이블 및 모든 텍스트에 적용되는 반면 명시 적 글꼴 크기는 정의되지 않습니다. 그러나 이것은 TextBox에 영향을 미치지 않으므로 유사한 코드 또는 기타 특수 컨트롤에 대해 유사한 코드를 작성해야합니다.

Ctrl-Mousewheel을 사용하여 글꼴 크기를 전 세계적으로 동적으로 변경하려면 :

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;
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top