Как установить FontSize в pt, если мы используем StaticResource или DynamicResource?
В настоящее время я использую ресурс fontsize как
<sys:Double x:Key="FontSize13">13</sys:Double>
<sys:Double x:Key="FontSize12">12</sys:Double>
<sys:Double x:Key="FontSize11">11</sys:Double>
и используя как
<Setter Property="FontSize"
Value="{DynamicResource FontSize13}" />
Как установить FontSize в точку, как 10pt вместо пикселя?
3 ответа
Решение
Преобразование типов происходит во время компиляции компилятором XAML и, в частности, в ответ на FontSizeConverter
присутствовать на FontSize
свойство, поэтому у нас есть основная проблема с запуском конвертера. Но мы можем создать расширение разметки помощника, чтобы сделать работу.
Вот как выглядит XAML:
<Grid>
<Grid.Resources>
<local:FontSize Size="20" x:Key="TwentyPixels"/>
<local:FontSize Size="11pt" x:Key="ElevenPoint"/>
</Grid.Resources>
<StackPanel>
<TextBlock Text="Sample text" FontSize="{StaticResource TwentyPixels}"/>
<TextBlock Text="Sample text" FontSize="{StaticResource ElevenPoint}"/>
</StackPanel>
</Grid>
и вот расширение разметки:
public class FontSizeExtension : MarkupExtension
{
[TypeConverter(typeof(FontSizeConverter))]
public double Size { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return Size;
}
}
Просто используйте пробел между числом и "pt". Например:
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Segoe UI"/>
<Setter Property="FontSize" Value="11 pt"/>
</Style>
Просто изменил ресурс с Double на String и включил спецификатор единицы
<sys:String x:Key="FontSize13">13pt</sys:String>