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>

posted @ 2012-10-26 09:44  AnswerCard  阅读(3330)  评论(1编辑  收藏  举报