2012-02-04 4 views
1

Я получаю XamlParseException при вызове XamlReader.Load() в button1_Click (объект отправителя, RoutedEventArgs е) код ниже:Получение XamlParseException при вызове XamlReader.Load (XMLReader)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using System.Data.SqlClient; 
using System.Data; 
using System.IO; 
using HTMLConverter; 
using System.Windows.Markup; 


namespace StackoverflowTest 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public static SqlConnection conn = new SqlConnection("Server=" + @".\SQLEXPRE" + 
            ";Initial Catalog=Hukuk;" + 
            "Integrated Security=True;" + 
            "User ID=;" + 
            "Password=;"); 

     public MainWindow() 
     { 
      InitializeComponent(); 
      try 
      { 
       conn.Open(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error opening SQL Server connection\n" + ex.Message); 
       //Close(); 
      } 

     } 

     public static FlowDocument SetRTF(string xamlString) 
     { 
      StringReader stringReader = new StringReader(xamlString); 
      System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(stringReader); 
      return XamlReader.Load(xmlReader) as FlowDocument; 
     } 


     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      SqlCommand commProc = new SqlCommand("SELECT Name, Content from Document where ID=3219", MainWindow.conn); 
      string str; 
      FlowDocumentReader fdocr = new FlowDocumentReader(); 
      SqlDataReader dr = commProc.ExecuteReader(); 
      try 
      { 
       if (dr.Read()) 
       { 
        byte[] bt = (byte[])dr["Content"]; 
        str = Encoding.Default.GetString(bt); 
        str = HTMLConverter.HtmlToXamlConverter.ConvertHtmlToXaml(str, true); 
        fdocr.Document = MainWindow.SetRTF(str); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("An error occured while trying to view document\n" + ex.Message); 
      } 

      dr.Close(); 
      dr.Dispose(); 
     } 
    } 
} 

К сожалению, не может опубликовать xamlstring Я пытаюсь пройти, потому что он слишком большой. Есть ли другой способ показать это вам?

И деталь исключения здесь:

System.Windows.Markup.XamlParseException occurred 
    Message='Add value to collection of type 'System.Windows.Documents.TableRowGroupCollection' threw an exception.' Line number '1' and line position '28143'. 
    Source=PresentationFramework 
    LineNumber=1 
    LinePosition=28143 
    StackTrace: 
     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.Load(XamlReader xamlReader, Boolean skipJournaledProperties, Uri baseUri) 
     at System.Windows.Markup.XamlReader.Load(XamlReader xamlReader, ParserContext parserContext) 
     at System.Windows.Markup.XamlReader.Load(XmlReader reader, ParserContext parserContext, XamlParseMode parseMode) 
     at System.Windows.Markup.XamlReader.Load(XmlReader reader) 
     at WpfApplication1.MainWindow.SetRTF(String xamlString) in C:\Documents and Settings\nosirovkh\Рабочий стол\посл\WpfApplication1\WpfApplication1\WpfApplication1\MainWindow.xaml.cs:line 69 
    InnerException: System.ArgumentNullException 
     Message=Value cannot be null. 
Parameter name: item 
     Source=PresentationFramework 
     ParamName=item 
     StackTrace: 
      at MS.Internal.Documents.TableTextElementCollectionInternal`2.Add(TElementType item) 
      at MS.Internal.Documents.ContentElementCollection`2.System.Collections.IList.Add(Object value) 
      at System.Windows.Documents.TableRowGroupCollection.System.Collections.IList.Add(Object value) 
      at System.Xaml.Schema.XamlTypeInvoker.AddToCollection(Object instance, Object item) 
      at MS.Internal.Xaml.Runtime.ClrObjectRuntime.Add(Object collection, XamlType collectionType, Object value, XamlType valueXamlType) 
     InnerException: 
+0

Ваш код не является для меня исключением. Либо это вызвано чем-то в вашем '...', или чем-то совершенно другим. Попробуйте создать простое приложение, которое фактически воспроизводит проблемы и публикует их здесь. – svick

+0

@svick: Я согласен, создание простого приложения для воспроизведения - вот путь сюда. Я не хочу видеть код, который генерирует ошибку, которая упоминает «позиция строки 41430». –

+0

Похоже, вы пытаетесь добавить 'null' в' TableRowGroupCollection'. Если вы отформатируете XAML с правильными отступом и разрывами строк, а не на одной строке (как я полагаю, это так), вы должны найти конкретную строку, в которой есть проблема. Если вы опубликуете XAML в этот момент, мы сможем сузить проблему. –

ответ

2

Похоже, ваш XAML, вероятно, порождается некоторой программой, которая является источником проблемы.

Вот проблема:

<Table> 
    <TableColumn Width="331"/> 
    <TableColumn Width="48"/> 
    <TableColumn Width="48"/> 
    <TableColumn Width="48"/> 
    <TableColumn Width="48"/> 
    <TableColumn Width="44"/> 
    <TableColumn Width="52"/> 
    ... 
</Table> 

А вот правильный код:

<Table> 
    <Table.Columns> 
    <TableColumn Width="331"/> 
    <TableColumn Width="48"/> 
    <TableColumn Width="48"/> 
    <TableColumn Width="48"/> 
    <TableColumn Width="48"/> 
    <TableColumn Width="44"/> 
    <TableColumn Width="52"/> 
    </Table.Columns> 
    ... 
</Table> 

Есть 6 столов, где это происходит.

Я не знаю, что породило этот XAML, но это похоже на плохую ошибку. Вам потребуется либо исправление, либо исправить файл XAML самостоятельно, либо написав небольшую программу, чтобы найти такую ​​вещь, либо вручную (желательно) Visual Studio.

+0

Спасибо за ответ! Я пытаюсь написать небольшую программу, чтобы добавить '' и '' там, где это необходимо. Я опубликую результаты, как только закончу. –

+0

Спасибо за все ответы, вы помогли мне решить мою проблему! –

0

У меня была подобная ошибка при запуске приложения WPF с помощью следующего кода XAML:

<Window x:Class="XXX.Wpf.IV.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="IV" WindowState="Normal" Height="1024" Width="1280"> 

<Grid> 
    <local:IVView x:Name="_ivView"/> 
</Grid> 

</Window> 

ОКАЗЫВАЕТСЯ причину, вызвавшую «XmalParseException добавить в коллекцию ...» в том, что мой класс IVView должен был UserControl, но я создал его как расширение окна. Я подозреваю, что у нас похожие проблемы.

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