Сценарий:
Я хочу использовать 3 стандартных размера шрифта для своего приложения WPF: 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