#wpf
#wpf
Вопрос:
в настоящее время я использую ресурс размера шрифта как
<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}" />
Как установить размер шрифта в точке, например 10pt, вместо пикселя?
Ответ №1:
Преобразование типа происходит во время компиляции компилятором 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;
}
}
Комментарии:
1. без расширения нет способа сделать это в самом ресурсе XAML?
2. Я пытался придумать способ, но не смог. Вы можете делать ужасные вещи, например, определять текстовый блок в статических ресурсах с размером шрифта, а затем ссылаться на этот размер шрифта, но это не то, что вы хотите.
3. Спасибо за метод расширения. Отлично
Ответ №2:
Просто используйте пробел между числом и «pt». Например:
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Segoe UI"/>
<Setter Property="FontSize" Value="11 pt"/>
</Style>
Ответ №3:
Просто изменил ресурс с Double на String и включил спецификатор unit
<sys:String x:Key="FontSize13">13pt</sys:String>
Комментарии:
1. К сожалению, это вызывает исключение ArgumentException во время выполнения.