WPF设计时解析是不同的

时间:2016-06-05 09:51:11

标签: c# wpf xaml

我遇到的问题是我的MarkupExtension在设计时表现不同,或者说xaml解析器提供不同的值。

我的班级:

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显示格式为 hh \\:mm \\:ss ,格式化工作正常。

但是在设计器中抛出了FormatException:Input string was not in a correct format.

如果我调试设计器(附加到XDesProc.exe),IntelliSence告诉我格式为 hh:mm:ss ;反斜杠消失了。

我试过了:

  • '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 个答案:

答案 0 :(得分:1)

试试这个:

在UserControl / Window的顶部:

hide()

然后在控件中:

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

如果您有任何问题,请发布示例项目。