아…먼저 지난 번에 자유게시판에 글을 올렸었는데…삭제가된거 같군요;;; 아니면 제가 못 찾았거나…
일단 WPF 사용중에 있습니다. .Net 버전은 8.0이구요.
하고싶은건 버튼을 누르면 UI 전체의 Font를 바꾸는겁니다.
각 Control의 FontFamily를 바꾸는게 아닌 화면에 보이는 Font를 바꾸는건데…
아무리 찾아봐도 FontFamily를 바꾸는거 까지만 되고, 화면이 바뀌지는 않네요…
FontFamily가 바뀌는건 .cs 파일(코드 비하인드)에서 이벤트 핸들러를 하나 만들어서 확인 했습니다.
Copilot에 물어봐서 다음과 같이 UpdateLayout()도 호출 해봤지만…
Application.Current.MainWindow?.InvalidateVisual();
Application.Current.MainWindow?.UpdateLayout();
여전히 고정되어 있습니다.
다시한 번 제가 원하는 동작은 Font를 바꾸는데, UI까지 바뀌는겁니다. (여기서 UI가 바뀌지 않아서 글을 올립니다.)
잘 부탁 드립니다.
잘 하시는 분들께서 상세한 답변 주실 것 같습니다…ㅎㅎ;;
Dynamic resource 이용하여 구현 가능할 것 같네요. 최대한 간단하게만 구현해봅니다.
-
처음 화면

-
버튼 클릭 시

다음은 구현 코드입니다.
<Application.Resources>
<ResourceDictionary>
<FontFamily x:Key="FontKey">Arial</FontFamily>
</ResourceDictionary>
</Application.Resources>
<Window.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontFamily" Value="{DynamicResource FontKey}" />
</Style>
</Window.Resources>
<StackPanel>
<TextBlock>Hello, World!</TextBlock>
<TextBlock>Hello, World2!</TextBlock>
<Button Click="Button_Click" Content="Click to change" />
</StackPanel>
private void Button_Click(object sender, RoutedEventArgs e)
{
var currentFont = App.Current.Resources["FontKey"] as FontFamily;
if (currentFont!.Source == "Consolas")
{
App.Current.Resources["FontKey"] = new FontFamily("Arial");
}
else
{
App.Current.Resources["FontKey"] = new FontFamily("Consolas");
}
}
4개의 좋아요
답변 감사합니다.
이유는 좀 찾아봐야겠지만…DynamicResource로 해결이 됐습니다.
감사합니다.
1개의 좋아요