原文:WPF中动态加载XAML中的控件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Xml;
using System.Windows.Markup; /*
 * 功能:测试WPF中动态加载XAML中的控件
 *       并加到指定的子节点中。
 * 作者:Kagula
 * 时间:2012-09-20
 * 环境:VS2008 .NET FRAMEWORK 3.5 
 * 参考资料:[1]《Application=Code+Markup 读书笔记 19》
 *               http://space.itpub.net/15123181/viewspace-423015
 *           [2]《Pack URIs in Windows Presentation Foundation》
 *               http://technet.microsoft.com/en-US/library/aa970069(v=vs.90)
 */
namespace testXAMLLoad
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();             //LoadEmbeddedXaml();
            //LoadEmbeddedXaml2();
            LoadEmbeddedXaml3();
        }         //从字符串中加载
        public void LoadEmbeddedXaml() 
        { 
            Title = "Load Embedded Xaml";
            string strXaml = "<Button xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'" + 
                " Foreground='LightSeaGreen' FontSize='16pt' Width='128' Height='32'>" + 
                " From String Object!</Button>"; 
            StringReader strreader = new  StringReader(strXaml); 
            XmlTextReader xmlreader = new  XmlTextReader(strreader);
            object obj = XamlReader.Load(xmlreader);
            grid1.Children.Add((UIElement)obj);
        }         //从外部文件中加载 Button控件
        public void LoadEmbeddedXaml2()
        {
            XmlTextReader xmlreader = new XmlTextReader("d:\\a.xaml");
            UIElement obj = XamlReader.Load(xmlreader) as UIElement;
            grid1.Children.Add((UIElement)obj);
        }         //从资源文件中加载
        public void LoadEmbeddedXaml3()
        {
            //Build Action = Resource,Do not Copy,无相应cs文件
            Uri uri = new Uri("/LoadXamlResource.xaml",UriKind.Relative);
            Stream stream =Application.GetResourceStream(uri).Stream;
            //FrameworkElement继承自UIElement
            FrameworkElement obj =XamlReader.Load(stream) as FrameworkElement;
            grid1.Children.Add(obj);
        }
    } 
}
<Button xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'    Foreground='LightSeaGreen' 
    FontSize='16pt' 
    Width='128' 
    Height='32'>
    From File Object!
</Button>

WPF中动态加载XAML中的控件的更多相关文章

  1. 在ASP.NET中动态加载内容(用户控件和模板)

    在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<tab ...

  2. [WPF学习笔记]动态加载XAML

    好久没写Blogs了,现在在看[WPF编程宝典],决定开始重新写博客,和大家一起分享技术. 在编程时我们常希望界面是动态的,可以随时变换而不需要重新编译自己的代码. 以下是动态加载XAML的一个事例代 ...

  3. 某APK中使用了动态注册BroadcastReceiver,Launcher中动态加载此APK出现java.lang.SecurityException异常的解决方法

    在某APK中,通过如下方法动态注册了一个BroadcastReceiver,代码参考如下: @Override protected void onAttachedToWindow() { super. ...

  4. 在MVC应用程序中动态加载PartialView

    原文:在MVC应用程序中动态加载PartialView 有时候,我们不太想把PartialView直接Render在Html上,而是使用jQuery来动态加载,或是某一个事件来加载.为了演示与做好这个 ...

  5. 在VC中动态加载ODBC的方法

    在使用VC.VB.Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置ODBC数据源.对于一般用户而言,配置ODBC数据源可能是一件比较困难的工作.而且,在实际应用中,用户往往 ...

  6. vue中动态加载img

    想实现动态加载图片,当点击“首页”时,图片变色 代码如下: <mt-tabbar v-model="selected" fixed class="border-1p ...

  7. WPF 3D动态加载模型文件

    原文:WPF 3D动态加载模型文件 这篇文章需要读者对WPF 3D有一个基本了解,至少看过官方的MSDN例子. 一般来说关于WPF使用3D的例子,都是下面的流程: 1.美工用3DMAX做好模型,生成一 ...

  8. XamlReader 动态加载XAML

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

  9. 实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)

    实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624 ...

随机推荐

  1. 9.3 Binder系统_驱动情景分析_服务获取过程

    4. 服务获取过程 test_client客户端: (1)在用户态先构造name=“hello”的数据(服务的名字是hello),调用ioctl发送数据给service_manager(handle= ...

  2. linux中内存泄漏的检測(一)最简单的方法

    什么是内存泄漏 内存泄漏是指程序动态申请的内存在使用完后没有释放,导致这段内存不能被操作系统回收再利用. 比如这段程序,申请了4个字节的空间但没有释放,有4个字节的内存泄漏. #include < ...

  3. 七步从AngularJS菜鸟到专家(7):Routing

    这是"AngularJS – 七步从菜鸟到专家"系列的第七篇. 在第一篇,我们展示了如何開始搭建一个AngularaJS应用.在第四.五篇我们讨论了Angular内建的directives.上一篇了解 ...

  4. linux下的打包和压缩

    linux中常见的两种压缩包文件的格式是.tar..gz和.tar.gz..tar仅仅是将文件简单地打包,文件的大小没有变化,也就是说.tar文件仅仅是一个包,没有被压缩:.tar.gz文件是打包后用 ...

  5. POJ 1251 Jungle Roads (zoj 1406) MST

    传送门: http://poj.org/problem?id=1251 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=406 P ...

  6. java File类的基本使用

    package com.soar.file; import java.io.File; import java.io.IOException; public class Demo2_FileMetho ...

  7. java 多线程(三)条件对象

    转载请注明出处:http://blog.csdn.net/xingjiarong/article/details/47417383 在上一篇博客中,我们学会了用ReentrantLock来控制线程訪问 ...

  8. Swift开发教程--关于Existing instance variable &#39;_delegate&#39;...的解决的方法

    xcode编译提示问题:Existing instance variable '_delegate' for property 'delegate' with  assign attribute mu ...

  9. 设计模式-适配器模式(Go语言描写叙述)

    在上一篇博客设计模式-策略模式(Go语言描写叙述)中我们用最简单的代码用go语言描写叙述了设计模式中的策略模式,用最简单的实例来描写叙述相信能够让刚開始学习的人能够非常轻松的掌握各种设计模式.继上篇博 ...

  10. vs 2013 常用快捷键及常见问题的解决

    1. 代码编辑 关闭当前文档:ctrl + F4 打开光标所在位置的文档:ctrl + G(shift + g) 返回上次编辑的位置:ctrl + -(键盘数字键 0 后的那个按键) 移动光标所在的行 ...