После небольшого копания выясняется, что TextBlock фактически не вызывает ToString для всего, что передается. Чтобы обойти это, вы должны использовать Converter для вызова ToString для вас.
Вот в чем проблема, TemplateBinding не поддерживает конвертеры. Необходимо добавить TemplateBinding в DataContext, а затем использовать обычное связывание в свойстве Text вместе с конвертером.
Таким образом, разметка TextBlock становится
<TextBlock Width="50" Height="30" DataContext="{TemplateBinding Value}" Text="{Binding Converter={StaticResource NumberTypeToStringConverter}}" />
Мой пользовательский конвертер:
public class NumberTypeToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
throw new NullReferenceException();
}
return value.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
MethodInfo methodInfo = targetType.GetMethod("Parse");
if (methodInfo == null)
{
throw new MissingMethodException("The targetType to convert back to a Number must implement a Parse method");
}
return methodInfo.Invoke(null, new object[] { value });
}
}
Это кажется чем-то вроде работы, и мне было бы интересно узнать, имеет ли это какие-либо неблагоприятные последствия. Также, если кто-то читает это и что-то не так с моим конвертером, пожалуйста, дайте мне знать.
Приветствия