我遇到的问题是我的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\\:mm\\:ss'
{}hh\\:mm\\:ss
Format='hh\\\\:mm\\\\:ss'
(这适用于设计师,但不适用于运行时)Format=hh\\\\:mm\\\\:ss
(这适用于设计师,但不适用于运行时)Format=hh\\:mm\\:ss
知道为什么解析器提供不同的字符串值吗?
答案 0 :(得分:1)
试试这个:
在UserControl / Window的顶部:
hide()
然后在控件中:
<Window.Resources>
<c:FormattableConverter x:Key="formattableConverter" />
<sys:String x:Key="myParameter"> hh\\:mm\\:ss </sys:String>
</Window.Resources>
如果您有任何问题,请发布示例项目。