XAML是可以动态加载的,这里所说的动态加载就是说写好了一个静态XAML,然后在运行时用C#加载到相应的地方去。

动态加载XAML注意的几点:

1)待加载的XAML只能有一个根节点,也就是说不能有多个平行的节点

2)待加载的XAML要引入命名空间xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

3)注意一下加载的语法,看下下面的代码就知道了

4)动态加载XAML其实也分为两种,一种是通过String来加载,一种是加载静态的XAML,其实加载静态的XAML是在String的基础上 改进而已,是首先把XAML加载进内存,存为String变量,然后再用String加载的方法加载进去。

下面是主界面XAML:

<phone:PhoneApplicationPagex:Class="XmlStudy.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"FontFamily="{StaticResource PhoneFontFamilyNormal}"FontSize="{StaticResource PhoneFontSizeNormal}"Foreground="{StaticResource PhoneForegroundBrush}"SupportedOrientations="Portrait" Orientation="Portrait"shell:SystemTray.IsVisible="True"><!--ContentPanel - 在此处放置其他内容--><Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"><Button Content="Button" HorizontalAlignment="Left" Margin="163,88,0,0" VerticalAlignment="Top" Click="Button_Click"/><Grid x:Name="MyRoot" HorizontalAlignment="Left" Height="417" VerticalAlignment="Top" Width="458" Margin="12,180,0,0" Grid.Row="1"/></Grid></phone:PhoneApplicationPage>

下面是截图:

待会我要把Button下面动态加载一个Grid控件

下面是Code Behind:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using XmlStudy.Resources;
using System.IO;
using System.Windows.Resources;
using System.Windows.Markup;namespace XmlStudy
{public partial class MainPage : PhoneApplicationPage{// 构造函数public MainPage(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){string xaml = "";StreamResourceInfo info = Application.GetResourceStream(new Uri("/XmlStudy;component/Page1.xaml" ,UriKind.Relative));using (StreamReader sr = new StreamReader(info.Stream)){xaml = sr.ReadToEnd();}Grid g = (Grid)XamlReader.Load(xaml);MyRoot.Children.Add(g);}}
}

上面注意一下加载的语法就行了。

下面是待加载的XAML:

<Grid Background="Transparent"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><!--TitlePanel 包含应用程序的名称和页标题--><StackPanel Grid.Row="0" Margin="12,17,0,28"><TextBlock Text="新添加页面" Style="{StaticResource PhoneTextNormalStyle}"/><TextBlock Text="新添加页面" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/></StackPanel>
</Grid>

另外要注意的是这个待加载的XAML的属性要设置为Resource,默认为Page,这样才能用GetResourceStream加载进去。

然后点击按钮,加载这个GRID:

加载成功

Winphone开发之动态加载XAML相关推荐

  1. XamlReader 动态加载XAML

    原文:XamlReader 动态加载XAML XAML: <Grid xmlns:x="http://schemas.microsoft.com/client/2006" x ...

  2. Android插件化开发之动态加载本地皮肤包进行换肤

    Android插件化开发之动态加载本地皮肤包进行换肤 前言: 本文主要讲解如何用开源换肤框架 android-skin-loader-lib来实现加载本地皮肤包文件进行换肤,具体可自行参考框架原理进行 ...

  3. Android插件化开发之动态加载的类型

    https://segmentfault.com/a/1190000005113493 基本信息 Author:kaedea GitHub:android-dynamical-loading 现在网络 ...

  4. Android插件化开发之动态加载三个关键问题详解

    本文摘选自任玉刚著<Android开发艺术探索>,介绍了Android插件化技术的原理和三个关键问题,并给出了作者自己发起的开源插件化框架. 动态加载技术(也叫插件化技术)在技术驱动型的公 ...

  5. Android插件化开发之动态加载基础之ClassLoader工作机制

    类加载器ClassLoader 早期使用过Eclipse等Java编写的软件的同学可能比较熟悉,Eclipse可以加载许多第三方的插件(或者叫扩展),这就是动态加载.这些插件大多是一些Jar包,而使用 ...

  6. Android插件化开发之动态加载技术系列索引

    动态加载介绍 在Android开发中采用动态加载技术,可以达到不安装新的APK就升级APP功能的目的,可以用来到达快速发版的目的,也可以用来修复一些紧急BUG. 现在使用得比较广泛的动态加载技术的核心 ...

  7. Android插件化开发之动态加载技术简单易懂的介绍方式

    转载地方:https://segmentfault.com/a/1190000004062866 基本信息 Author:kaedea GitHub:android-dynamical-loading ...

  8. Android开发之动态加载,运行未安装apk

    Android运行未安装apk可以使用Android的DexClassLoader类 这个也可以再Android的官方文档中看到 A class loader that loads classes f ...

  9. php拓展so,PHP扩展开发之动态加载so模块与静态重编译PHP(上)-Go语言中文社区...

    动态加载so模块:利用ext_skel工具编译生成so模块,修改php.ini文件,动态加载即可 静态编译:将编写的模块静态编译到PHP,需要重新编译PHP 假设要编写一个my_dynamic扩展,调 ...

最新文章

  1. 水平反向拆分VSCode编辑器快捷键为Ctrl+\(正交拆分Ctrl+K Ctrl+\),如何快速将当前组编辑器窗口复制到另一侧?设置垂直向下拆分编辑器快捷键Alt+\
  2. MyBatis框架添加客户有哪些步骤
  3. [转载] 晓说——第21期:“看美国”系列之《日裔步兵团的奋战》
  4. Oracle数据库中有关记录个数的查询
  5. openstack之虚拟机管理命令
  6. Hibernate- 包作用详解
  7. XSS-Game level 10
  8. 【十五分钟Talkshow】如何理解并优化.NET应用程序对内存的使用
  9. 【Gym-10167】Is-A,Has-A, Who Knowz-A【图的连通性】
  10. eclipse配置jboss
  11. 开放源代码的设计层面框架Spring——day03
  12. Python切图九宫格
  13. 黑马程序员---wpf学习笔记四---banding的那些事
  14. 大数据的概念、特点及应用场景
  15. linux scp 自动备份,linux Oracle 自动备份并scp
  16. ubuntu更新软件包命令_从Ubuntu命令行查看哪些更新的软件包可用
  17. 工作杂谈001-供应商对接
  18. 再见c罗再见梅西_再见眼镜你好smartglasses
  19. IKAnalyzer中文分词分析内容目录
  20. 【锐捷无线】无线网络优化

热门文章

  1. 谁是华为最主要的供应商?哪些公司受华为影响最大?
  2. 名编辑电子杂志大师教程 | 分享按钮
  3. QQ机器人协议平台停运原因分析以及未来走势
  4. Tkinter模块学习
  5. 在模板字符串中条件判断和遍历
  6. 如何选择包装机?云易科告诉你!
  7. lc501.二叉搜索树中的众数【线索二叉树Morris遍历->lc538】
  8. 黑马学成在线-课程分布
  9. 如何通过7个步骤编写出色的在线用户手册,让天下没有难用的产品
  10. 3阶以内的矩阵求逆矩阵的3种手算方法