我正在使用加载 XAML XamlReader
,当我使用条件字符串格式进行数据绑定时,我无法加载它。为了确保我没有犯任何语法错误,我在独立的 WPF 应用程序中尝试了条件格式。这是我用于验证的 XAML:
<Window
x:Class="WpfApplication.Window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<TextBlock Text="{Binding Value, StringFormat={}{0:;#,##0.00;}}"/>
</Window>
和代码隐藏:
public partial class Window {
public Window() {
InitializeComponent();
DataContext = this;
}
public Decimal Value { get { return -1234567.89M; } }
}
正如预期的那样,数值显示时不带负号(如果值为零或正,则不显示)。
但是,我想使用以下方式加载 XAML XamlReader
:
var xaml = @"<TextBlock
xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
Text=""{Binding Value, StringFormat={}{0:;#,##0.00;}}""/>";
var textBlock = (TextBlock) XamlReader.Parse(xaml);
是相同的TextBlock
,但是,调用XamlReader.Parse
失败并出现异常:
System.Windows.Markup.XamlParseException 发生 Message='标记扩展结束后出现意外的标记。' 行号“3”和行位置“40”。 来源=PresentationFramework 行号=3 线位置=40 堆栈跟踪: 在 System.Windows.Markup.XamlReader.RewrapException(异常 e,Uri baseUri) 在 System.Windows.Markup.XamlReader.Load(XmlReader 阅读器,ParserContext parserContext,XamlParseMode parseMode) 在 System.Windows.Markup.XamlReader.Load(XmlReader 阅读器) 在 System.Windows.Markup.XamlReader.Parse(字符串 xamlText) 在 WpfApplication\Window.xaml.cs:line 17 中的 WpfApplication.Window..ctor() 内部异常:System.Xaml.XamlParseException Message='标记扩展结束后出现意外的标记。' 行号“3”和行位置“40”。 源 = System.Xaml 行号=3 线位置=40 堆栈跟踪: 在 MS.Internal.Xaml.Parser.MePullParser.d__0.MoveNext() 在 MS.Internal.Xaml.Parser.XamlPullParser.d__6f.MoveNext() 在 MS.Internal.Xaml.Parser.XamlPullParser.d__14.MoveNext() 在 MS.Internal.Xaml.Parser.XamlPullParser.d__7.MoveNext() 在 MS.Internal.Xaml.Parser.XamlPullParser.d__0.MoveNext() 在 MS.Internal.Xaml.NodeStreamSorter.ReadAheadToEndOfAttributes() 在 MS.Internal.Xaml.NodeStreamSorter.ReadAheadAndSortCtorProperties() 在 MS.Internal.Xaml.NodeStreamSorter..ctor(XamlParserContext 上下文,XamlPullParser 解析器,XamlXmlReaderSettings 设置,Dictionary`2 xmlnsDictionary) 在 System.Xaml.XamlXmlReader.Initialize(XmlReader givenXmlReader、XamlSchemaContext schemaContext、XamlXmlReaderSettings 设置) 在 System.Xaml.XamlXmlReader..ctor(XmlReader xmlReader、XamlSchemaContext schemaContext、XamlXmlReaderSettings 设置) 在 System.Windows.Markup.XamlReader.Load(XmlReader 阅读器,ParserContext parserContext,XamlParseMode parseMode) 内部异常:
{}{0:;#,##0.00;}
如果我用';#,##0.00;'
加载成功替换晦涩的字符串格式。不幸的是,我需要的另一种格式(用于正值的格式)是'#,##0.00;;'
,并且由于某种未知的原因,如果值为负,它不会作为条件格式。(它显示带有符号的负数,而不是像它应该做的那样不显示任何东西。“括号”版本没有这个问题。)
XamlReader.Parse
所以我的问题是,当我使用相同的 XAML 构建 WPF 应用程序时,当使用相同的条件字符串格式可以正常加载 XAML 时,为什么我不能在数据绑定中使用带括号的条件字符串格式?