Как мне разобрать не-GUI XAML-файл? - PullRequest
0 голосов
/ 20 июля 2011

Хорошо, вот что я хочу сделать.

  1. Создать «файл конфигурации» с помощью XAML 2009. Это будет выглядеть примерно так:

    <TM:Configuration 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:tm="clr-namespace:Test.Monkey;assembly=Test.Monkey" 
    >
        <TM:Configuration.TargetFile>xxxx</TM:Configuration.TargetFile>
    <TM:Configuration 
    
  2. Выполните синтаксический анализ этого файла во время выполнения, чтобы получить объект-граф.

1 Ответ

0 голосов
/ 21 июля 2011

Простой способ:

var z = System.Windows.Markup.XamlReader.Parse(File.ReadAllText("XAMLFile1.xaml"));

(Turns out this does support XAML 2009 after all.)

Трудный путь, но с меньшим количеством зависимостей:

var x = ParseXaml(File.ReadAllText("XAMLFile1.xaml"));

    public static object ParseXaml(string xamlString)
    {
        var reader = new XamlXmlReader(XmlReader.Create(new StringReader(xamlString)));
        var writer = new XamlObjectWriter(reader.SchemaContext);
        while (reader.Read())
        {
            writer.WriteNode(reader);
        }
        return writer.Result;
    }

Создание XAML из графа объекта:

    public static string CreateXaml(object source)
    {
        var reader = new XamlObjectReader(source);
        var xamlString = new StringWriter();
        var writer = new XamlXmlWriter(xamlString, reader.SchemaContext);
        while (reader.Read())
        {
            writer.WriteNode(reader);
        }
        writer.Close();
        return xamlString.ToString();
    }

Примечания:

  1. Полностью квалифицировать все пространства имен.Не удается найти локальные сборки только по пространству имен.
  2. Рассмотрите возможность использования ContentPropertyAttribute.
  3. Полезные примечания по XAML 2009: http://wpftutorial.net/XAML2009.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...