我们所经常使用的WPF界面大部分都是使用XAML文件进行定义编写,然后经编译生成窗体和控件,还有的就是在后台代码中定义控件和元素…这些都是在程序编译后已经固化不变的了…如果想要在程序编译后再使用XAML生成控件就不是那么简单了…

但是,WPF还是狠狠强大的了…她不但可以在程序编译前根据XAML生成控件元素,而且还可以在程序编译后加载指定的XAML文件然后生成控件元素…好了废话不多说了>>>

<!----------华--------丽----------的-----------分----------割-------------线--------->

要想实现上述功能需要使用到System.Windows.Markup命名空间下的XamlRader类了…

下面是她的几个可以实现上述功能的方法了…
 Load(Stream)

读取指定 Stream 中的 XAML 输入,并返回作为相应对象树根的 Object。
 Load(XamlReader)

通过所提供的 XamlReader 读取 XAML 输入,并返回作为相应对象树根的对象。

 Load(XmlReader)

读取指定 XmlReader 中的 XAML 输入,并返回作为相应对象树根的对象。
 Load(Stream, ParserContext)

读取指定 Stream 中的 XAML 输入,并返回作为相应对象树根的对象。

 LoadAsync(Stream)

读取指定 Stream 中的 XAML 输入,并返回相应对象树的根。
LoadAsync(XmlReader)

读取指定 XmlReader 中的 XAML 输入,并返回相应对象树的根。

LoadAsync(Stream, ParserContext)

读取指定 Stream 中的 XAML 输入,并返回相应对象树的根。

Parse(String)

读取指定文本字符串中的 XAML 输入,并返回与指定标记的根对应的对象。

Parse(String, ParserContext)

(使用指定的 ParserContext)读取指定文本字符串中的 XAML 标记,并返回与指定标记的根对应的对象。

<!----------华--------丽----------的-----------分----------割-------------线--------->

首先呢,先尝试一下最简单的 Parse(String)方法了…

定义以下字符串了…

<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Width="200" Height="200" Background="Blue" >
    <Button Content="Dynamic Button One" Background="Yellow"/>
    <Button Content="Dynamic Button Two" Background="Yellow"/>
    <Button Content="Dynamic Button Three" Background="Yellow"/>
    <TextBox Text="Dynamic TextBox" Background="LightGreen"/>
</StackPanel>

然后呢,使用XamlReader.Parse(String)方法生成Object对象了,参数为上面的字符串值了…

然后声明一个窗体让窗体的Content对象等于上一步生成的Object对象了…然后让窗体Show一下看看了…

完整代码如下了:

   1:  Application app = new Application();
   2:  Window win = new Window();
   3:  String xaml = " <StackPanel xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Width=\"200\" Height=\"200\" Background=\"Blue\" > <Button Content=\"Dynamic Button One\" Background=\"Yellow\"/> <Button Content=\"Dynamic Button Two\" Background=\"Yellow\"/> <Button Content=\"Dynamic Button Three\" Background=\"Yellow\"/> <TextBox Text=\"Dynamic TextBox\" Background=\"LightGreen\"/> </StackPanel>";
   4:  win.Content = XamlReader.Parse(xaml);
   5:  app.Run(win);

运行效果如下了:

当然了…真正使用的时候呢…应该是从外部获取到XAML的内容了…然后生成控件…也就是Load()方法所实现的了…

XAMLReader不但能生成Button,TextBox而且还可以生成窗体等其他元素控件了…但是必须加载元素控件所在的命名空间了,即:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation”,如果没有加载所对应的命名空间就会出现错误了…

上述只是很简单的使用了…更强大的功能请君自己开发了,这些动态生成的控件是没有任何时间关联的了,如果想要实现事件触发还需在程序中指定了…

转载于:https://www.cnblogs.com/kordkuo/archive/2012/08/31/2665765.html

使用未编译的XAML动态生成WPF控件相关推荐

  1. 【ASP.NET】js动态生成的控件,在后台获取不到怎么办?

    JS代码如下: oNewNode.innerHTML = "  <input type=file id=file"+filecount+" οnchange=per ...

  2. 使用GridView做出列选择效果(获取动态生成的控件.鼠标点选GridView.Ajax控件)

    先看效果图: 其实就是个一览定制的效果,只不过由于项目的需要,需要使用GridView进行设计,至于为什么不直接使用Html+JQuery,还是因为项目需要,不然维护起来会很麻烦,在制作的过程中会遇到 ...

  3. C# winform 后台控制删除动态生成的控件

    RadioButton是由数据库列表数据读出来,放到panelEx2上的,现在局部刷新,需要删除这些RadioButton,重新添加. List<Control> removeList = ...

  4. 还是动态生成一个控件

    首先,利用System.Type.GetType方法,获得字符串中指定的控件的类型实例. 这里需要注意这个字符串的语法,根据msdn的解释: 按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符.返 ...

  5. CreateChildControls 里动态生成的控件 PostBack 之后不能保持状态

    CreateChildControls 要先把控件的层次创建好在给控件值. 就是给值语句一定要在controls.add之后,不是所有的都这样,反正这样准没错!

  6. 第一章:初识WPF,XAML,WPF控件

    前言 总目录 本章主要介绍WPF与XAML,以及WPF的控件的基本使用,让大家先初步认识WPF. 关于WPF的官方资料:官方WPF文档1 .官方WPF文档2.官方WPF文档3.官方WPF文档4 一.W ...

  7. [转] 使用模板自定义 WPF 控件

      [转] 使用模板自定义 WPF 控件                                                                                 ...

  8. WPF控件开发之自定义控件(1)

    Windows Presentation Foundation (WPF) 控件模型的扩展性极大减少了创建新控件的需要.但在某些情况下,仍可能需要创建自定义控件.本主题讨论可最大限度减少在 Windo ...

  9. wpf控件开发基础(1)

    从现在开始,我将尝试写有关wpf控件开发相关的知识,把文章这对我来说很难,所以这个系列的文章在时间跨度上可能会拖的比较长.我希望我介绍是比较详细的,而不仅仅是一个简单的控件开发流程.我是一个真正的We ...

最新文章

  1. 如何指定在Git上执行shell命令时使用的私有SSH密钥?
  2. linux运维入门第一周的学习部分命令!
  3. esp8266环境搭建
  4. CentOS上安装Docker (图解)
  5. linux 自动安装系统,cobbler 自动安装linux系统
  6. Java编程,打印昨天的当前时刻
  7. (113)FPGA面试题-LUT计算问题
  8. FastReport使用一——简介
  9. UWB源码资料 研创物联源码资料 可二次开发 dwm1000模块 双边双向测距
  10. Java --人民币(RMB)小写/数字转换大写工具类
  11. python音频频谱_用python绘制音频频谱图
  12. 电子相册如何用c语言制作,电子相册怎样制作?
  13. UVa 11223 - O: dah dah dah!
  14. 将U盘的图标改成自己喜欢的图案
  15. [LeetCode 中等 树]545. 二叉树的边界
  16. mac办公软件里值得推荐给大家的好软件
  17. c 语言10个数首尾连接,相邻4个和,西安交通大学18年9月课程考试《计算机控制技术》作业考核试题答案...
  18. htc+820+android+5.0,首款高通64位八核 HTC Desire 820评测
  19. laravel composer 融云im即时通信
  20. 三十而立如何成为准富人

热门文章

  1. Exchange 2007 配置POP3
  2. vscode开发python使用教程_在VS Code上搭建Python开发环境的方法
  3. go get 失败 no go files in_Go 每日一库之 dig
  4. 为什么可积不一定可导_耳机为什么分L和R?你一定不知道真相
  5. 江阴市职称计算机考试,要评职称的人请注意!!江阴这些新变化了解一下
  6. linux网络掉线频繁怎么设置,ubuntu频繁掉线
  7. android分屏资源适配,android7.0分屏适配
  8. 简单的错觉画_一看就错?眼睛厉害还是大神画的厉害!
  9. 通过mem函数在MicroPython中访问模块寄存器
  10. 2021年春季学期-信号与系统-第十四次作业参考答案-第三小题参考答案