WPF Как установить pt(12pt и т. Д.) Через DynamicResource для свойства FontSize

Я могу использовать:

<TextBlock Text="Some Textes" FontSize="12pt" />

Работает нормально. Но я хочу использовать DynamicResource расширение, это возможно?

Это не работает:

<TextBlock Text="Some Textes" FontSize="{DynamicResource SomeResources}" /> 

SomeResources:

<System:Stringx:Key="SomeResources">12pt</System:String>

Я не хочу использовать AttachedBehavior, Я знаю, я могу решить мою проблему с помощью (используя FontSizeConverter).

2 ответа

Обновить:

Я вижу, что вы отредактировали свой вопрос и удалили обязательный вариант. Если вы хотите получить это только от ресурса xaml, вам нужно использовать MarkupExtension, Вы можете найти MarkupExtension и использование здесь. Это будет хорошо работать для вашего случая.

Orig ответ:

FontSize имеет тип System:Double Документация

Следующий по умолчанию Binding за FontSize Предполагается, что пиксели в масштабе, не зависящем от устройства, но так как вам нужны pt, мы можем использовать конвертер, такой как:

using System.Globalization;
using System.Windows;
using System.Windows.Data;

class ConvertFromPoint : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
    var convertFrom = new FontSizeConverter().ConvertFrom(value.ToString());
    if (convertFrom != null)
      return (double) convertFrom;
    return 1;
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
    throw new NotImplementedException();
  }
}

и использование:

<TextBlock FontSize="{Binding StringProperty, Converter={StaticResource ConvertFromPointConverter}}">Some Text</TextBlock>

Alternate:

Если вы не хотите использовать конвертеры и FontSizeConverter просто сделайте расчет в вашей собственности геттер.

что-то вроде:

private double _someFontval;
public double SomeFontVal {
  get {
    return _someFontval * 96 / 72;
  }

  set {
    _someFontval = value;
  }
}

использование:

//.cs
SomeFontVal = 12.0;

//.xaml
<TextBlock FontSize="{Binding SomeFontVal}">Some Text</TextBlock>

Я полагаю, что вы можете просто связать его как int double

<System:Double x:Key="SomeResources">12</System:Double>
Другие вопросы по тегам