2013-02-18 5 views
0

У меня есть Silverlight приложение, которое сохраняет RichTextBox в XAML, вроде этого:Read RichTextBox XAML из Silverlight в WPF

<Comentario> 
    <Section xml:space="preserve" HasTrailingParagraphBreakOnPaste="False" xmlns="http://www.schemas.microsoft.com/winfx/2006/xaml/presentation"> 
    <Paragraph FontSize="22" FontFamily="Arial" Foreground="#FF000000" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" CharacterSpacing="0" Typography.AnnotationAlternates="0" Typography.EastAsianExpertForms="False" Typography.EastAsianLanguage="Normal" Typography.EastAsianWidths="Normal" Typography.StandardLigatures="True" Typography.ContextualLigatures="True" Typography.DiscretionaryLigatures="False" Typography.HistoricalLigatures="False" Typography.StandardSwashes="0" Typography.ContextualSwashes="0" Typography.ContextualAlternates="True" Typography.StylisticAlternates="0" Typography.StylisticSet1="False" Typography.StylisticSet2="False" Typography.StylisticSet3="False" Typography.StylisticSet4="False" Typography.StylisticSet5="False" Typography.StylisticSet6="False" Typography.StylisticSet7="False" Typography.StylisticSet8="False" Typography.StylisticSet9="False" Typography.StylisticSet10="False" Typography.StylisticSet11="False" Typography.StylisticSet12="False" Typography.StylisticSet13="False" Typography.StylisticSet14="False" Typography.StylisticSet15="False" Typography.StylisticSet16="False" Typography.StylisticSet17="False" Typography.StylisticSet18="False" Typography.StylisticSet19="False" Typography.StylisticSet20="False" Typography.Capitals="Normal" Typography.CapitalSpacing="False" Typography.Kerning="True" Typography.CaseSensitiveForms="False" Typography.HistoricalForms="False" Typography.Fraction="Normal" Typography.NumeralStyle="Normal" Typography.NumeralAlignment="Normal" Typography.SlashedZero="False" Typography.MathematicalGreek="False" Typography.Variants="Normal" TextOptions.TextHintingMode="Fixed" TextOptions.TextFormattingMode="Ideal" TextOptions.TextRenderingMode="Auto" TextAlignment="Left" LineHeight="0" LineStackingStrategy="MaxHeight"> 
    <Run FontSize="22" FontFamily="Janda Apple Cobbler" Foreground="#FF000000">My TEXT</Run> 
    </Paragraph> 
    </Section> 
    </Comentario> 

У меня также есть локальное приложение WPF, который должен прочитать XAML. Richtextbox в WPF не поддерживает XAML, поэтому мне нужно преобразовать этот XAML в FlowDocument. Я перепробовал много способов сделать это, но я также получаю сообщение об ошибке:

Код 1:

 StringReader stringReader = new StringReader(xamlString); 
     System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(stringReader); 
     Section sec = XamlReader.Load(xmlReader) as Section; 
     FlowDocument doc = new FlowDocument(); 
     while (sec.Blocks.Count > 0) 
     { 
      var block = sec.Blocks.FirstBlock; 
      sec.Blocks.Remove(block); 
      doc.Blocks.Add(block); 
     } 

Ошибка:

Primera excepción дель типо 'System.Windows.Markup.XamlParseException' ан PresentationFramework.dll

Сведения о пользователе: 'Невозможно создать неизвестный тип' {http://www.schemas.microsoft.com/winfx/2006/xaml/presentation} Раздел '.' Номер строки «1» и позиция линии «2».

Код 2: Использование ParserContext

 System.Windows.Markup.ParserContext parserContext = new System.Windows.Markup.ParserContext(); 
     parserContext.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation"); 
     parserContext.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml"); 
     StringReader stringReader = new StringReader(xamlString); 
     System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(stringReader); 
     Section sec = XamlReader.Load(xmlReader,parserContext) as Section; 
     FlowDocument doc = new FlowDocument(); 
     while (sec.Blocks.Count > 0) 
     { 
      var block = sec.Blocks.FirstBlock; 
      sec.Blocks.Remove(block); 
      doc.Blocks.Add(block); 
     } 

Ошибка: Ошибка 14 Лучший перегруженный метод подходит для «System.Windows.Markup.XamlReader.Load (System.IO.Stream, System.Windows.Markup. ParserContext) 'имеет некоторые недопустимые аргументы

Пожалуйста, помогите мне, мне нужно найти способ прочитать строку XAML, созданную в Sirvelight, в моем локальном приложении WPF.

ответ

0

Первый

http://www.schemas.microsoft.com/winfx/2006/xaml/presentation

должен быть

http://schemas.microsoft.com/winfx/2006/xaml/presentation

Если предположить, что это опечатка, ваша следующая проблема с использованием XAML Parser. Даже если Comentario, Section и Paragraph существуют в WPF, они могут жить в другом пространстве имен и, вероятно, имеют разные свойства.

Учитывая, что вы смирились с преобразованием XAML в FlowDocument, возможно, было бы лучше пропустить парсер XAML.

Почему бы просто не использовать XDocument вместо XamlReader?

+0

Hi Trigger. Спасибо за Ваш ответ. Я дважды проверяю свой код Silverlight, и он иногда сохраняет XAML с http://www.schemas.microsoft.com/winfx/2006/xaml/presentation и в других случаях http://schemas.microsoft.com/winfx/2006/XAML/презентации. Я удаляю www. из XAML String и «works», прямо сейчас я перехожу к другой ошибке, CharacterSpacing не является свойством в WPF, но является свойством в Silverlight (это не является частью этого случая). Последний вопрос: знаете ли вы, как предотвратить Silverlight, чтобы сохранить XAML с www. и в других случаях без него? –

+0

Я ожидаю, что вы часто столкнетесь с свойствами, которые либо не существуют, либо имеют разные имена в вашем преобразовании. Как я уже говорил, если вы рассматриваете строку XAML как XML, вам не нужно будет беспокоиться об именах пространств имен или именах свойств, и вы можете просто сосредоточиться на сопоставлении одного типа Silverlight (определенного в XML) с одним типом WPF. –

Смежные вопросы