Динамически загружать шрифты из ResourceDictionaries в приложении WPF (в зависимости от символов компиляции) - PullRequest
0 голосов
/ 28 октября 2019

У меня есть приложение, которое использует различные стили оформления (в основном цвета, некоторые изображения, и теперь мне также нужны шрифты). Он выбирает «тему» ​​в зависимости от символа компиляции. Так что во время компиляции он будет использовать тот или иной xaml с цветами и т. Д., Которые затем будут именоваться по имени, и все работает нормально. 95% приложения построено на 1 окне wpf.

Я сейчас пытаюсь распространить эту технику на шрифты: каждая тема имеет два шрифта. Одним из них является базовый шрифт (который, как я думал, я бы назначил окну, чтобы все остальные наследовали его), а второй - для некоторых специальных меток здесь и там. Я прочитал несколько SO вопросов по этому поводу, но не могу загрузить ни один из новых шрифтов.

Мой ресурсный словарь выглядит так:

...
<SolidColorBrush x:Key="HiliteError" Color="IndianRed"></SolidColorBrush>
<BitmapImage x:Key="logoHR" UriSource="pack://application:,,,/Resources/logoHR.png"></BitmapImage>
<FontFamily x:Key="FontPrime">Resources/#MagistralLight</FontFamily>
...

иесть мое первое сомнение: какой правильный синтаксис ?? Я пробовал пакет ,,, 'нормальный' путь с .ttf в конце, странный путь выше с #, который я где-то видел, но все они терпят неудачу.

Ближайшее, что я получаю, это когдаЯ определяю стили для окна и текстового блока в app.xaml.

<Style TargetType="{x:Type Window}">
            <Setter Property="FontFamily" Value="{DynamicResource FontSecd}" />
</Style>
<Style TargetType="TextBlock">
            <Setter Property="FontFamily" Value="{DynamicResource FontSecd}" />
</Style>

Затем проводник динамического свойства показывает «DynamicResourceSomthing» в зеленой рамке под fontfamily ... но это все. Таким образом, текст остается в пользовательском интерфейсе SEGOE по умолчанию (нигде явно не определено). Сдается мне, я пропускаю один шаг. Приложение получает динамическое свойство, назначенное правильно, но не применяет его.

Итак, чтобы прояснить это еще раз: мне нужна возможность переключать шрифты во время компиляции, как я уже делал с другими визуальными свойствами. Я использую фиксированные имена ресурсов, которые связаны во время компиляции с разными словарями. Там эти имена связаны с различными ресурсами.

...