@postya

Как установить шрифт лейблам из файла settings меньшим количеством кода?

Приложение на C# + WPF
Имеется 8 лейблов и 20 шрифтов
При загрузке программы берутся названия шрифтов из файла settings и в зависимости от названий шрифтов каждому лейблу присваивается соответствующий шрифт

У меня есть условия if else, всё работает, вот только кода получается ооочень много, хотелось бы рефакторинг сделать, и сделать так,чтобы кода было меньше каким-то другим способом

Как это можно сделать?

//переменные в которые помещаются названия шрифтов для каждого лейбла
           var fontCategory1 = Settings.Default.LabelCategoryFont1;
            var fontCategory2 = Settings.Default.LabelCategoryFont2;
            var fontCategory3 = Settings.Default.LabelCategoryFont3;
            var fontCategory4 = Settings.Default.LabelCategoryFont4;
            var fontCategory5 = Settings.Default.LabelCategoryFont5;
            var fontCategory6 = Settings.Default.LabelCategoryFont6;
            var fontCategory7 = Settings.Default.LabelCategoryFont7;
            var fontCategory8 = Settings.Default.LabelCategoryFont8;


условия, в которых в зависимости от названия шрифта, присваивается шрифт каждому лейблу.Здесь условия всего для двух лейблов и двух шрифтов, а всего лейблов будет 8 и 20 шрифтов, можно представить какая это будет портянка не эффективная с условиями if

if (fontCategory1 == "Heron Sans Light")
            {
                ApplyFontProperties(CategoryLabel1, new FontFamily("HeronSans"), FontWeights.Light,
                    FontStyles.Normal);
            }
            
            if (fontCategory2 == "Heron Sans Light")
            {
                ApplyFontProperties(CategoryLabel2, new FontFamily("HeronSans"), FontWeights.Light,
                    FontStyles.Normal);
            }
            
            if (fontCategory1 == "Heron Sans Bold")
            {
                ApplyFontProperties(CategoryLabel1, new FontFamily("HeronSans"), FontWeights.Bold,
                    FontStyles.Normal);
            }
            
            if (fontCategory2 == "Heron Sans Bold")
            {
                ApplyFontProperties(CategoryLabel2, new FontFamily("HeronSans"), FontWeights.Bold,
                    FontStyles.Normal);
            }


Метод ApplyFontProperties присвает каждому лейблу шрифт и стили, в зависимости от того, какой лейбл поступил на вход:

private void ApplyFontProperties(Label label, FontFamily fontFamily, FontWeight fontWeight, FontStyle fontStyle)
        {
            if (label == CategoryLabel1)
            {
                CategoryLabel1.FontFamily = fontFamily;
                CategoryLabel1.FontStyle = fontStyle;
                CategoryLabel1.FontWeight = fontWeight;
            }
            if (label == CategoryLabel2)
            {
                CategoryLabel2.FontFamily = fontFamily;
                CategoryLabel2.FontStyle = fontStyle;
                CategoryLabel2.FontWeight = fontWeight;
            }
            if (label == CategoryLabel3)
            {
                CategoryLabel3.FontFamily = fontFamily;
                CategoryLabel3.FontStyle = fontStyle;
                CategoryLabel3.FontWeight = fontWeight;
            }
            if (label == CategoryLabel4)
            {
                CategoryLabel4.FontFamily = fontFamily;
                CategoryLabel4.FontStyle = fontStyle;
                CategoryLabel4.FontWeight = fontWeight;
            }
            if (label == CategoryLabel5)
            {
                CategoryLabel5.FontFamily = fontFamily;
                CategoryLabel5.FontStyle = fontStyle;
                CategoryLabel5.FontWeight = fontWeight;
            }
            if (label == CategoryLabel6)
            {
                CategoryLabel6.FontFamily = fontFamily;
                CategoryLabel6.FontStyle = fontStyle;
                CategoryLabel6.FontWeight = fontWeight;
            }
            if (label == CategoryLabel7)
            {
                CategoryLabel7.FontFamily = fontFamily;
                CategoryLabel7.FontStyle = fontStyle;
                CategoryLabel7.FontWeight = fontWeight;
            }
            if (label == CategoryLabel8)
            {
                CategoryLabel8.FontFamily = fontFamily;
                CategoryLabel8.FontStyle = fontStyle;
                CategoryLabel8.FontWeight = fontWeight;
            }


Файл settings, в котором хранятся названия шрифтов. Формат данных string:

<setting name="LabelCategoryFont1" serializeAs="String">
           <value>Heron Sans Light</value>
  </setting>

   <setting name="LabelCategoryFont2" serializeAs="String">
            <value>Heron Sans Bold</value>
    </setting>
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman Куратор тега C#
C# the best
MVVM и биндинги спасут вас. Для wpf работа с формой напрямую это моветон.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы