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);
        }
    } 
}



                
### 创建和添加新的XAML窗口 在WPF项目中创建和添加新的XAML窗口涉及几个具体操作。这些步骤确保新窗口能够被正确识别并用于应用程序。 #### 添加新窗口类文件 通过Visual Studio集成开发环境来实现这一目标非常简便。鼠标右键单击解决方案资源管理器中的项目节点,选择“添加”-> “新建项”。随后弹出的新建项对话框里挑选“窗口 (WPF)”选项,并指定一个有意义的名字给这个即将诞生的XAML文件[^3]。 ```xml <Window x:Class="YourNamespace.NewWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="New Window" Height="450" Width="800"> <!-- 窗口内容 --> </Window> ``` 此代码片段展示了基本结构,其中`x:Class`属性定义了关联的后台代码部分的位置;而其他如高度、宽度以及标题等则是可视化的初始配置参数。 #### 修改App.xaml以支持多窗体启动 如果希望应用启动时即打开多个窗口,则需调整`App.xaml`文件里的`StartupUri`属性指向主窗口之外的地方,或者移除该属性并在`App.xaml.cs`内编程方式实例化所需展示的第一个窗口对象。 ```csharp protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); var mainWindow = new MainWindow(); mainWindow.Show(); // 如果有第二个窗口也想要立即显示的话 var secondWindow = new NewWindow(); secondWindow.Show(); } ``` 上述C#代码示范了如何重载`OnStartup`方法从而控制程序初次运行的行为模式,允许同时呈现两个不同的界面给用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值