У меня проблема с тем, что мой MarkupExtension ведет себя по-разному во время разработки, или, скорее, парсер xaml предоставляет разные значения.Разработано разное время разработки WPF
мой класс:
class FormattableConverter : MarkupExtension, IValueConverter
{
public FormattableConverter(string format)
{
Format = format;
}
public string Format { get; set; }
public override void ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var formattable = value as IFormattable;
return formattable?.ToString(Format, culture);
}
/* ConvertBack returns NotImplementedException */
}
Я использую его, чтобы показать DateTime
значение в .:
<HeaderedContentControl Content="{Binding DateTimeValue, Converter={c:FormattableConverter 'hh\\:mm\\:ss'}}"
/* Other parameters */ />
Ломая во время выполнения, IntelliSense показывает формат чч \\: мм \ \: ss и форматирование.
Но в дизайнеру FormatException отбрасывается: Input string was not in a correct format.
Если я отладка дизайнера (Прикрепление к XDesProc.exe) Intellisence показать мне, что формат чча: мм: сс; Обратные косые черты исчезли.
Я пробовал:
'hh\\:mm\\:ss'
'hh\\:mm\\:ss'
{}hh\\:mm\\:ss
Format='hh\\\\:mm\\\\:ss'
(это работает дизайнером, но не во время выполнения)Format=hh\\\\:mm\\\\:ss
(это работает дизайнером, но не время работы)Format=hh\\:mm\\:ss
- другие комбинации выше
Любая идея, почему анализатор обеспечивает различные строковые значения?
Я только что попробовал изменить свой конвертер, чтобы использовать ConverterParameter вместо свойства, и делаю это: 'ConverterParameter =" hh \: mm \: ss "'. Это работает! Также, перемещая строку формата в ресурс, также работает. По-видимому, синтаксический анализатор не любит анализировать пользовательские свойства. – Anders
@Nautious Я рад, что это сработало. – Vishal