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" 스타일만 변경하면 되고 나머지는 해당 스타일에서 상속됩니다. (이 속성을 기준으로 상속된 스타일 내에 다른 세터를 작성하는 경우에도 기본 스타일을 확장할 수 있습니다.)
FontSizeProperty는 상위 컨트롤에서 상속됩니다.따라서 기본 창의 글꼴 크기만 변경하면 됩니다.
동적 동작이 필요하지 않으면 다음과 같이 작동합니다.
리소스 사전에 창 스타일 추가
<Style TargetType="{x:Type Window}">
<Setter Property="FontSize" Value="15" />
</Style>
기본 양식에 스타일 적용(파생 유형이므로 암시적으로 적용되지 않음)
Style = (Style)FindResource(typeof (Window));
<Window>
FontSize 속성이 있습니다.
따라서 창 내의 모든 요소에서 글꼴 크기를 변경하려면 요소에서 원하는 글꼴 크기를 설정할 수 있습니다.
<Window FontSize="12">
</Window>
또 다른 옵션은 Font Family 및 FontSize를 리소스로 정의하는 것입니다.
<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily>
<sys:Double x:Key="BaseFontSize">12</sys:Double>
그런 식으로 세터에서 사용할 수 있습니다.
Application.Current.MainWindow.FontSize = _appBodyFontSize;
이렇게 하면 런타임에 글꼴 크기를 변경할 수도 있습니다.
TextElement.FontSize
상속 속성입니다. 즉, 루트 요소에서 글꼴 크기를 설정하면 모든 하위 요소가 해당 크기를 사용합니다(수동으로 변경하지 않는 한).
WPF의 모든 스타일에 대해 앱의 스타일을 포함하는 별도의 리소스 사전이 있어야 합니다.
앱 전체에서 재사용되는 단일 글꼴 크기를 사용하려면 해당 글꼴 크기에 대한 스타일을 만들기만 하면 됩니다.명시적으로 사용할 고유한 이름/키를 지정하거나 대상을 설정할 수 있습니다.앱 전체에서 초월할 유형입니다.
명시적 키:
<Style
x:Key="MyFontSize"
TargetType="TextBlock">
<Setter
Property="FontSize"
Value="10" />
</Style>
<Control
Style="{StaticResource MyFontSize}" />
*이 스타일은 컨텐츠 발표자가 있는 컨트롤과 함께 사용할 수 있습니다.
앱의 모든 텍스트 블록에 대해:
<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에는 영향을 주지 않으므로 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;
}
}
XAML에서 리소스를 사용하는 것이 방법입니다.이 질문에 대한 많은 훌륭한 답변이 있지만, 저는 자원의 범위에 2센트를 추가하고 싶습니다.
프로젝트의 모든 Windows 및 사용자 컨트롤에서 글로벌 액세스를 위해 리소스를 App.xaml 파일에 저장할 수 있습니다.
<Application.Resources>
<Style TargetType="{x:Type Control}" x:Key="GlobalFontSize">
<Setter Property="FontSize" Value="28"/>
</Style>
</Application.Resources>
Window 수준의 접근성을 위해 리소스를 Window용 xaml 파일에 저장할 수 있습니다.
<Window.Resources>
<Style TargetType="{x:Type Control}" x:Key="GlobalFontSize">
<Setter Property="FontSize" Value="28"/>
</Style>
</Window.Resources>
예를 들어 제어 수준에서 사용할 수도 있습니다.
<DockPanel.Resources>
<Style TargetType="{x:Type Control}" x:Key="GlobalFontSize">
<Setter Property="FontSize" Value="28"/>
</Style>
</DockPanel.Resources>
블랙 매직을 사용해 보겠습니다.
- 응용 프로그램 리소스에 이중 리소스 추가
<Application.Resources>
<sys:Double xmlns:sys="clr-namespace:System;assembly=mscorlib" x:Key="GlobalFontSize">12</sys:Double>
</Application.Resources>
- 앱 클래스에 정적 속성 추가
public static double GlobalFontSize
{
get => (double)Current.Resources["GlobalFontSize"];
set => Current.Resources["GlobalFontSize"] = value;
}
- 는 원는위이리사용소스하서로 원하는 할 수 .
DynamicResource
FontSize="{DynamicResource GlobalFontSize}"
- 속성 액스성
App.GlobalFontSize
어떤 식으로든 가치를 변화시킬 수 있습니다.binding
괜찮아요!
App.GlobalFontSize = 20;
//Or
{Binding Path=(local:App.GlobalFontSize)}
언급URL : https://stackoverflow.com/questions/893428/wpf-global-font-size
'source' 카테고리의 다른 글
Ionic에서 알림 상자 외부를 클릭할 때 알림 상자를 닫지 않는 방법 (0) | 2023.06.10 |
---|---|
표시된 데이터와 축 사이의 공간 제거 (0) | 2023.06.10 |
파이어베이스 인증에서 이메일을 변경하는 방법은 무엇입니까? (0) | 2023.06.06 |
UIAction 만들기변수 목록이 아닌 배열로 전달하여 '기타 단추'를 시트합니다. (0) | 2023.06.06 |
레일에서 비계 실행 취소 (0) | 2023.06.06 |