首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF ResourceDictionary StringFormat XamlParseException

WPF ResourceDictionary StringFormat XamlParseException
EN

Stack Overflow用户
提问于 2013-04-03 22:07:47
回答 1查看 777关注 0票数 2

我有一个定义了样式的ResourceDictionary,它有一个带有绑定StringFormat的ControlTemplate,如下所示:

代码语言:javascript
复制
<TextBlock Text="{Binding TotalCash, Mode=OneWay, StringFormat={}{0:N2}, FallbackValue=0.00}" />

我在本地运行,一切正常,但我在服务器上进行了构建和安装,当我启动任何使用ResourceDictionary的世界粮食计划署屏幕时,我得到以下异常:

代码语言:javascript
复制
System.Windows.Markup.XamlParseException: 'Unexpected token after end of markup extension.' Line number '224' and line position '148'. ---> System.Xaml.XamlParseException: 'Unexpected token after end of markup extension.' Line number '224' and line position '148'.
   at MS.Internal.Xaml.Parser.MePullParser.<Parse>d__0.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<LogicStream_Attribute>d__6f.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_EmptyElement>d__14.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_Element>d__7.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementContent>d__4a.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementBody>d__23.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_Element>d__7.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementContent>d__4a.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementBody>d__23.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_Element>d__7.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementContent>d__4a.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementBody>d__23.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_Element>d__7.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementContent>d__4a.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementBody>d__23.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_Element>d__7.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementContent>d__4a.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementBody>d__23.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_Element>d__7.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_PropertyContent>d__5f.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_NonemptyPropertyElement>d__42.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_PropertyElement>d__35.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementBody>d__23.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_Element>d__7.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementContent>d__4a.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementBody>d__23.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_Element>d__7.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementContent>d__4a.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_ElementBody>d__23.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<P_Element>d__7.MoveNext()
   at MS.Internal.Xaml.Parser.XamlPullParser.<Parse>d__0.MoveNext()
   at MS.Internal.Xaml.NodeStreamSorter.ReadAheadToEndOfAttributes()
   at MS.Internal.Xaml.NodeStreamSorter.ReadAheadAndSortCtorProperties()
   at MS.Internal.Xaml.NodeStreamSorter.MoveNext()
   at System.Xaml.XamlXmlReader.Read()
   at System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   --- End of inner exception stack trace ---
   at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)

我做了一些工作,将ResourceDictionary StringFormat从{}{0:N2}更改为N2:

代码语言:javascript
复制
<TextBlock Text="{Binding TotalCash, Mode=OneWay, StringFormat=N2, FallbackValue=0.00}" />

以下是放入UserControl的工作原理:

代码语言:javascript
复制
<TextBlock Text="{Binding TotalCash, Mode=OneWay, StringFormat={}{0:N2}, FallbackValue=0.00}" />

我的问题是,为什么相同的StringFormat可以在UserControl中工作,而不能在ResourceDictionary中工作?我很高兴它起作用了,但我想知道为什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-03 22:58:23

这是个WPF bug

我猜您在本地开发机器上安装了.NET 4.5 (可能是因为安装了Visual Studio2012),但没有安装在服务器上(它只安装了.NET 4)。因此,您的服务器没有微软在.NET 4.5中添加到WPF中的错误修复。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15789673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档