【问题标题】:Where do XAML files that build as "Page" go?构建为“页面”的 XAML 文件在哪里?
【发布时间】:2012-11-06 23:00:40
【问题描述】:

我已将 XAML 文件添加到 Windows Phone 8 项目中。它的构建动作是“Page”。我想将 XAML 作为文本字符串加载(以输入 XamlReader.Load())。我怎样才能做到这一点?

它不能作为 XAP 包中的单独文件提供;它可能在 DLL 中的某个地方。

【问题讨论】:

    标签: silverlight xaml windows-phone windows-phone-8


    【解决方案1】:

    当设置为Page 时,编译器会将 XAML 编译为 BAML,并将 BAML 文件作为资源添加到程序集。

    如果您希望在运行时从 BAML 资源中取回原始 XAML,则需要反序列化 BAML,然后将您的对象序列化为 XAML。

    您可以查看Baml2006Reader,或者更好的选择是使用Application.LoadComponent,这是InitializeComponent 方法在内部使用的。 InitializeComponent 由部分生成的类为您的 XAML 代码调用。

    var uri = new Uri("/MyAppName;component/MyXaml.xaml", //Note extension: XAML, not BAML
         UriKind.Relative);
    Page rootObject = new Page(); //Assuming XAML root element is Page - it could be anything
    Application.LoadComponent(rootObject, uri);
    

    (假设 XAML 文件的根元素是 Page)。

    然后您可以使用XamlWriterPage 序列化为XAML 字符串:

    string xaml = XamlWriter.Save(rootObject);
    

    请注意,这是System.Windows.Markup 命名空间中的XamlWriter,而不是System.Xaml。如果您的 XAML 具有 WPF 类型,则应使用此 XamlWriter 以避免错误。

    【讨论】:

    • 稍微修复了 sn-p,tx。
    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多