2012-04-28 1 views
2

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을로드 할 때 데이터 바인딩에 대괄호가있는 문자열 형식이 필요합니까?

답변

1

실제 질문에 대한 답변이 아니지만 이는 도움이 될 수 있습니다. 바인딩이 태그가 아닌 확장 태그가 아닌 확장으로 정의 된 경우 로딩은 정상입니다.

var xaml = @"<TextBlock 
    xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> 
    <TextBlock.Text> 
    <Binding Path=""Value"" StringFormat=""0:;#,##0.00;""/> 
    </TextBlock.Text> 
</TextBlock>";