2011-07-20 27 views
0

好的,这就是我想要做的。如何解析非GUI XAML文件?

  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. 解析在运行该文件,以获得对象的图形化。

回答

0

简单的方法:

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