프로그램 개발/C#

[wpf] c# 코드로 Style 설정하기 - 1 : 같은 Resource Dictionary 사용

(ㅇㅅㅎ) 2021. 1. 17. 22:42
728x90
반응형

같은 Resource Dictionary 안에 존재하는 다른 Style을 c# 코드로 변경하는 방법입니다.

 

기본적으로 ResourceDictionary가 필요합니다.

ResourceDictionary : Dictionary1.xaml
<Style x:Key="TB_Style1" TargetType="TextBlock">
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="Text" Value="스타일 변경 전"/>
    <Setter Property="FontSize" Value="20"/>
</Style>

<Style x:Key="TB_Style2" TargetType="TextBlock">
    <Setter Property="Foreground" Value="Violet"/>
    <Setter Property="Text" Value="스타일 변경 후"/>
    <Setter Property="FontSize" Value="25"/>
</Style>

 

앞에서 만든 ResourceDictionary를 App.xaml에 등록합니다.

App.xaml
<Application.Resources>
    <ResourceDictionary Source="/StyleTest;component/Dictionary1.xaml"/>
</Application.Resources>

 

그 후 xaml이나 c#에서 사용합니다. c# 코드에서 Application.Current 부분은 사용하지 않으셔도 상관없습니다.

xaml
<Grid>
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock x:Name="test_TB" Style="{DynamicResource TB_Style1}"/>
        <Button Content="스타일 변경" Click="Button_Click"/>
    </StackPanel>
</Grid>
c#
private void Button_Click(object sender, RoutedEventArgs e){
    Style s1 = Application.Current.FindResource("TB_Style1") as Style;
    Style s2 = FindResource("TB_Style2") as Style;

    if(test_TB.Style == s1){
        test_TB.Style = s2;
    }else{
        test_TB.Style = s1;
    }
}

 

반응형