Winphone开发之动态加载XAML
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相关推荐
- XamlReader 动态加载XAML
原文:XamlReader 动态加载XAML XAML: <Grid xmlns:x="http://schemas.microsoft.com/client/2006" x ...
- Android插件化开发之动态加载本地皮肤包进行换肤
Android插件化开发之动态加载本地皮肤包进行换肤 前言: 本文主要讲解如何用开源换肤框架 android-skin-loader-lib来实现加载本地皮肤包文件进行换肤,具体可自行参考框架原理进行 ...
- Android插件化开发之动态加载的类型
https://segmentfault.com/a/1190000005113493 基本信息 Author:kaedea GitHub:android-dynamical-loading 现在网络 ...
- Android插件化开发之动态加载三个关键问题详解
本文摘选自任玉刚著<Android开发艺术探索>,介绍了Android插件化技术的原理和三个关键问题,并给出了作者自己发起的开源插件化框架. 动态加载技术(也叫插件化技术)在技术驱动型的公 ...
- Android插件化开发之动态加载基础之ClassLoader工作机制
类加载器ClassLoader 早期使用过Eclipse等Java编写的软件的同学可能比较熟悉,Eclipse可以加载许多第三方的插件(或者叫扩展),这就是动态加载.这些插件大多是一些Jar包,而使用 ...
- Android插件化开发之动态加载技术系列索引
动态加载介绍 在Android开发中采用动态加载技术,可以达到不安装新的APK就升级APP功能的目的,可以用来到达快速发版的目的,也可以用来修复一些紧急BUG. 现在使用得比较广泛的动态加载技术的核心 ...
- Android插件化开发之动态加载技术简单易懂的介绍方式
转载地方:https://segmentfault.com/a/1190000004062866 基本信息 Author:kaedea GitHub:android-dynamical-loading ...
- Android开发之动态加载,运行未安装apk
Android运行未安装apk可以使用Android的DexClassLoader类 这个也可以再Android的官方文档中看到 A class loader that loads classes f ...
- php拓展so,PHP扩展开发之动态加载so模块与静态重编译PHP(上)-Go语言中文社区...
动态加载so模块:利用ext_skel工具编译生成so模块,修改php.ini文件,动态加载即可 静态编译:将编写的模块静态编译到PHP,需要重新编译PHP 假设要编写一个my_dynamic扩展,调 ...
最新文章
- 水平反向拆分VSCode编辑器快捷键为Ctrl+\(正交拆分Ctrl+K Ctrl+\),如何快速将当前组编辑器窗口复制到另一侧?设置垂直向下拆分编辑器快捷键Alt+\
- MyBatis框架添加客户有哪些步骤
- [转载] 晓说——第21期:“看美国”系列之《日裔步兵团的奋战》
- Oracle数据库中有关记录个数的查询
- openstack之虚拟机管理命令
- Hibernate- 包作用详解
- XSS-Game level 10
- 【十五分钟Talkshow】如何理解并优化.NET应用程序对内存的使用
- 【Gym-10167】Is-A,Has-A, Who Knowz-A【图的连通性】
- eclipse配置jboss
- 开放源代码的设计层面框架Spring——day03
- Python切图九宫格
- 黑马程序员---wpf学习笔记四---banding的那些事
- 大数据的概念、特点及应用场景
- linux scp 自动备份,linux Oracle 自动备份并scp
- ubuntu更新软件包命令_从Ubuntu命令行查看哪些更新的软件包可用
- 工作杂谈001-供应商对接
- 再见c罗再见梅西_再见眼镜你好smartglasses
- IKAnalyzer中文分词分析内容目录
- 【锐捷无线】无线网络优化