Сценарий:
Я хочу использовать для своего приложения WPF 3 стандартных размера шрифта: BigFontSize, NormalFontSize и SmallFontSize. Это двойные значения, и они определены в словаре ресурсов как (где sys правильно определено):
<sys:Double x:Key="BigFontSize">18</sys:Double>
<sys:Double x:Key="NormalFontSize">14</sys:Double>
<sys:Double x:Key="SmallFontSize">12</sys:Double>
Это хорошо работает. Но я случайно выбрал 14 как нормальный размер. Я хочу получить размер шрифта, определенный системой для NormalFontSize. (Если это будет сделано, я могу использовать конвертер , как описано в здесь, чтобы получить BigFontSize и SmallFontSize относительно NormalFontSize)
Подсказка:
Из документации я обнаружил, что размер шрифта по умолчанию хранится в статическом свойстве (double) SystemFonts.MessageFontSize. Но что мне делать, чтобы получить это значение в словарь ресурсов? (Я знаю, что Binding или DynamicResource не могут быть применены. Но это статическое значение, так как я могу применить StaticResource или x:Static или что-то еще?)
я пытался
<sys:Double x:Key="XXXFontSize">
<StaticResource ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>
а также
<sys:Double x:Key="XXXFontSize">
<x:Static ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>
Оба из них, похоже, не работают (как и ожидалось). Я получаю сообщение об ошибке Cannot add content to object of type 'System.Double'.
Примечание.
- Я не хочу делать это из кода, например из App (). (Возможно ли иметь код программной части для ResourceDictionary?)
Я не хочу заключать это в обобщенный стиль, на основе которого могут быть получены другие стили (с использованием
BasedOn), потому что у меня есть несколько словарей ресурсов, и невозможно использоватьDynamicResourceсBasedOn
То есть я не могу использовать<Style x:Key="BigFont" TargetType="{x:Type Control}"}> <Setter Property="Control.FontSize" Value="{Binding Source={x:Static SystemFonts.MessageFontSize}, Converter={ . . . }" /> </Style>Потому что, если у меня есть стиль в другом ResourceDictionary, скажем
HeaderTextBlockStyle, тогда мне придется использоватьBasedOn={DynamicResource BigFont}, что невозможно (я думаю)
Любая помощь будет принята с благодарностью.
Спасибо.
TAGS: WPF SystemFonts.MessageFontSize ResourceDictionary FontSize BasedOn DynamicResource.