programing

WPF 응용 프로그램의 기본 글꼴을 설정하려면 어떻게 해야 합니까?

megabox 2023. 4. 14. 21:35
반응형

WPF 응용 프로그램의 기본 글꼴을 설정하려면 어떻게 해야 합니까?

WPF 애플리케이션의 폰트 패밀리를 정의할 수 있도록 하고 싶다.에서 참조되는 테마로서 자원 사전을 사용하는 것이 좋습니다.App.xaml. 나는 그것을 만들어 보았다.Style다음과 같습니다.

<Style TargetType="{x:Type Control}">
    <Setter Property="FontFamily" Value="Segoe UI" />            
</Style>

하지만 이건 안 돼유형 설정TextBlock대부분의 컨트롤에서 작동하지만 이 기능이 적용되지 않는 컨트롤이 몇 개 있습니다.

창에 글꼴을 설정하고 해당 창의 모든 자식 컨트롤이 글꼴을 상속하도록 할 수 있습니다.그러나 대화창은 기본 글꼴로 돌아갈 것입니다. 이 글꼴은 제가 원하는 글꼴이 아닙니다.

좋은 생각 있어요?

고객님의Window서브클래스는 덮어쓰지 않는다DefaultStyleKeyWindow 스타일에 추가할 수 있습니다.TextElement.FontFamilyProperty는 상속된 속성입니다.

<Style TargetType="{x:Type Window}"> 
    <Setter Property="FontFamily" Value="Segoe UI" />             
</Style> 

또한 다음 항목을 앱 생성자에 추가해야 합니다.InitializeComponent호출:

FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
{
    DefaultValue = FindResource(typeof(Window))
});

작동 방식: App 객체의 초기화가 완료되면 지정된 Window 스타일이 모든 창의 기본 스타일이 됩니다.

제안된 해결책의 대부분은 나에게 효과가 없었다.심플한 솔루션:

App.xaml에 추가:

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

Initialize Component 뒤에 Main Window 컨스트럭터에 추가합니다.

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

실제로 XAML의 풀 솔루션을 입수할 수 있습니다.다른 답변도 몇 가지 있습니다.

메인 창이 호출된 경우WinMain(다른 모든 것보다 먼저 로드하는 것)이라는 이름의 스타일에 참조만 추가합니다. WinAll

<Window x:Class="MyNamespace.WinMain"
    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"
    Title="WinMain" Height="450" Width="800"
    Style="{StaticResource WinAll}">

그리고 자신의 스타일을 이렇게 정의한다.

<Style x:Key="WinAll" TargetType="{x:Type Window}">
    <Setter Property="FontFamily"
        Value="Comic Sans MS" />
    <Setter Property="FontSize"
        Value="14" />
</Style>

프로그래밍 방식으로 수행하는 간단한 방법 중 하나는 다음과 같습니다.

public MainWindow()
{
    this.FontFamily = new FontFamily("Segoe UI");
}

이걸 찾았어요

TextElement.FontFamilyProperty.OverrideMetadata(
typeof(TextElement),
new FrameworkPropertyMetadata(
    new FontFamily("Comic Sans MS")));

TextBlock.FontFamilyProperty.OverrideMetadata(
typeof(TextBlock),
new FrameworkPropertyMetadata(
    new FontFamily("Comic Sans MS")));

이 간단한 회피책은App.xaml(이후 코드는 불필요):

<SolidColorBrush x:Key="ForeBrush" Color="Blue" />

<Style x:Key="GenericTextStyle">
    <!-- Generic control forecolor definition -->
    <Setter Property="Control.Foreground" Value="{StaticResource ForeBrush}" />

    <!-- Add a definition for each unworking nested control -->
    <Style.Resources>
        <Style TargetType="{x:Type Label}">
            <Setter Property="Foreground" Value="{StaticResource ForeBrush}" />
        </Style>
    </Style.Resources>
</Style>

여기에 당신의 창문 스타일을 묶으세요.나한테는 딱 맞아.중첩된 트리에 일부 속성만 정의하면 됩니다.예를 들어 속성FontSize를 지정할 수 있는 것은 범용 섹션뿐입니다.

왜 이런 수법을 쓸 필요가 있는지 모르겠어요.라벨은 Control에서 파생되어야 하는데 이상합니다.아는 사람 있어?

언급URL : https://stackoverflow.com/questions/3145511/how-to-set-the-default-font-for-a-wpf-application

반응형