2016-06-05 7 views
0

У меня проблема с тем, что мой 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&#92;&#92;:mm&#92;&#92;:ss'
  • {}hh\\:mm\\:ss
  • Format='hh\\\\:mm\\\\:ss' (это работает дизайнером, но не во время выполнения)
  • Format=hh\\\\:mm\\\\:ss (это работает дизайнером, но не время работы)
  • Format=hh\\:mm\\:ss
  • другие комбинации выше

Любая идея, почему анализатор обеспечивает различные строковые значения?

ответ

1

Попробуйте это:

На верхней части UserControl/Окно:

<Window.Resources> 
    <c:FormattableConverter x:Key="formattableConverter" /> 
    <sys:String x:Key="myParameter"> hh\\:mm\\:ss </sys:String> 
</Window.Resources> 

, а затем в контроле:

<HeaderedContentControl Content="{Binding DateTimeVale, 
              Converter={StaticResource formattableConverter} 
              ConverterParameter={StaticResource myParameter}}"> 

</HeaderedContentControl> 

Тем не менее, если у вас есть какие-либо проблемы, то пожалуйста, напишите образец проекта.

+0

Я только что попробовал изменить свой конвертер, чтобы использовать ConverterParameter вместо свойства, и делаю это: 'ConverterParameter =" hh \: mm \: ss "'. Это работает! Также, перемещая строку формата в ресурс, также работает. По-видимому, синтаксический анализатор не любит анализировать пользовательские свойства. – Anders

+0

@Nautious Я рад, что это сработало. – Vishal