开发者

XamlObjectWriter throws exception while writing from XamlXmlReader - .Net 4

For some reason I get an exception. Can someone please explain to me why and how can fix this? I am trying to read a DataTemplate. If there is a better option please tell. Thanks.

using System;
using System.Windows;
using System.Windows.Data;
using System.IO;
using System.Xaml;
using System.Xml;

namespace TestApp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Func("logo", "name");
        }

        public void Func(string img, string name)
        {
            string imgSource = "{Binding Source={x:Static Res:Resources." + img + "}, Converter={StaticResource ImageConverter}}";

            string xamlString =
                "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" " +
                "xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" " +
                "xmlns:Res=\"clr-namespace:FavoritesOrganizer.Properties\"><StackPanel>" +
                "<Image Width=\"16\" Height=\"16\" Source=\"" + imgSource + "\" />" +
            "<TextBlock Text=\"" + name + "\" Margin=\"2, 0, 0, 0\开发者_Go百科" VerticalAlignment=\"Center\" />" +
            "</StackPanel></DataTemplate>";

            StringReader xaml = new StringReader(xamlString);
            XamlXmlWriter xamlWriter = null;
            try
            {
                XmlReader xr = XmlReader.Create(xaml);
                XamlXmlReader reader = new XamlXmlReader(xr);

                XamlObjectWriter writer = new XamlObjectWriter(reader.SchemaContext);

                XmlWriter xw = XmlWriter.Create(@"d:\xaml.xml");
                xamlWriter = new XamlXmlWriter(xw, reader.SchemaContext);

                int i = 1;
                while (reader.Read())
                {
                    try
                    {
                        var a = reader.Type;
                        xamlWriter.WriteNode(reader);
                        writer.WriteNode(reader);
                        i++;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message + " " + i);
                    }
                }
                DataTemplate datatemplate = (DataTemplate)writer.Result;//.Parse(xaml,pc);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (xamlWriter != null)
                {
                    xamlWriter.Flush();
                    xamlWriter.Close();
                }
            }
        }
    }
}


Create XamlXmlReader like this:

XamlXmlReader reader = new XamlXmlReader(xr, System.Windows.Markup.XamlReader.GetWpfSchemaContext());

and don't forget to use assembly= in XAML namespace declaration. This is needed to access types in your own assembly (Resources) when you use XamlXmlReader/Writer API.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜