XamlReader
을 사용하여 XAML을로드 중이며 조건부 문자열 형식을 사용하여 데이터 바인딩 할 때로드하는 데 문제가 있습니다. 내가 구문 오류를 만들지 않았는지 확인하기 위해 독립형 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>
그리고 코드 숨김 : 이것은 내가 확인을 위해 사용하는 XAML입니다
public partial class Window {
public Window() {
InitializeComponent();
DataContext = this;
}
public Decimal Value { get { return -1234567.89M; } }
}
으로 값이 0 또는 경우 수치가 표시되는 음의 부호없이 표시 (되지 않고 예상 양).
그러나, 나는 XamlReader
를 사용하여 XAML을로드 할 :
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 occurred Message='Unexpected token after end of markup extension.' Line number '3' and line position '40'. Source=PresentationFramework LineNumber=3 LinePosition=40 StackTrace: at System.Windows.Markup.XamlReader.RewrapException(Exception e, Uri baseUri) at System.Windows.Markup.XamlReader.Load(XmlReader reader, ParserContext parserContext, XamlParseMode parseMode) at System.Windows.Markup.XamlReader.Load(XmlReader reader) at System.Windows.Markup.XamlReader.Parse(String xamlText) at WpfApplication.Window..ctor() in WpfApplication\Window.xaml.cs:line 17 InnerException: System.Xaml.XamlParseException Message='Unexpected token after end of markup extension.' Line number '3' and line position '40'. Source=System.Xaml LineNumber=3 LinePosition=40 StackTrace: at MS.Internal.Xaml.Parser.MePullParser.d__0.MoveNext() at MS.Internal.Xaml.Parser.XamlPullParser.d__6f.MoveNext() at MS.Internal.Xaml.Parser.XamlPullParser.d__14.MoveNext() at MS.Internal.Xaml.Parser.XamlPullParser.d__7.MoveNext() at MS.Internal.Xaml.Parser.XamlPullParser.d__0.MoveNext() at MS.Internal.Xaml.NodeStreamSorter.ReadAheadToEndOfAttributes() at MS.Internal.Xaml.NodeStreamSorter.ReadAheadAndSortCtorProperties() at MS.Internal.Xaml.NodeStreamSorter..ctor(XamlParserContext context, XamlPullParser parser, XamlXmlReaderSettings settings, Dictionary`2 xmlnsDictionary) at System.Xaml.XamlXmlReader.Initialize(XmlReader givenXmlReader, XamlSchemaContext schemaContext, XamlXmlReaderSettings settings) at System.Xaml.XamlXmlReader..ctor(XmlReader xmlReader, XamlSchemaContext schemaContext, XamlXmlReaderSettings settings) at System.Windows.Markup.XamlReader.Load(XmlReader reader, ParserContext parserContext, XamlParseMode parseMode) InnerException:
나는 무명 교체하는 경우 문자열 형식 {}{0:;#,##0.00;}
이 ';#,##0.00;'
이면로드가 성공적입니다. 불행히도, 내가 필요로하는 다른 형식 (양수 값에 대한 것)은 '#,##0.00;;'
이고 값이 음수이면 조건부 형식으로 작동하지 않는 몇 가지 이유가 있습니다. (그것은 음모 번호를 표시하지 않고 기호로 표시합니다. "브래킷"버전에는이 문제가 없습니다.)
그래서 내 질문에 왜 조건문을 사용할 수 없습니까? 동일한 XAML을 사용하여 WPF 응용 프로그램을 빌드 할 때 동일한 조건부 문자열 형식이 좋은 경우 XamlReader.Parse
을 사용하여 XAML을로드 할 때 데이터 바인딩에 대괄호가있는 문자열 형식이 필요합니까?