WPF之路-从XAML入手

WPF新建好一个窗口后,会生成如下的XAML语句

<Window x:Class="WPF_Code.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" >
    <Grid>

    </Grid>
</Window>

同XML类似,XAML中最基本的语法元素就是标签、属性、内容

标签是通常是以<>开始,以

<Window x:Class="WPF_Code.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" >
    <Grid>
        <Grid.Background>
            <LinearGradientBrush>
                <GradientStop Color="#FFE27232" Offset="0"/>
                <GradientStop Color="White" Offset="1"/>
                <GradientStop Color="#FF6EBF61" Offset="2"/>
            </LinearGradientBrush>
        </Grid.Background>

    </Grid>
</Window>

元素的属性也可以通过标签来表示,如上所示的<Grid.Background>就是使用了Grid的背景属性,然后通过同样的方式,设置画笔的颜色,偏移量等待,完成渐变色

还可以通过打开属性面板》画笔来设置渐变色

既然说一个标签的声明就是一个类对象,那按照道理可以通过代码来创建类实现元素的创建

下面创建一个空的项目,然后添加两个类,分别命名为MyWindow.cs和Program.cs,前者用来创建一个包含按钮的窗体,后者用来启动这个窗体

MyWindow.cs

//需要引用以下三个命名空间
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;

namespace WPF_Code
{
    //当前类要继承处Window类
    class MyWindow : Window
    {
        //一个未实例化的按钮对象
        private Button btn;

        //当前窗体的构造函数
        public  MyWindow()
        {
            InitializeComponent();
        }

        //用于初始化窗体
        private void InitializeComponent()
        {
            //设置窗体大小 
            this.Width = 280;
            this.Height =200;
            this.Left = this.Top = 100;
            this.Title = "MyWindow";

            //创建一个容器,用来接收Button
            DockPanel dock_panel = new DockPanel();

            //创建按钮对象
            btn = new Button();
            btn.Content = "Plese click me.";
            btn.Margin = new Thickness(30);

            //为按钮绑定事件
            btn.Click += btn_Click;

            //提供分析允许混合子元素或文本的元素所需的方法
            IAddChild container = dock_panel;
            container.AddChild(btn);
            container = this;
            container.AddChild(dock_panel);
        }

        void btn_Click(object sender, RoutedEventArgs e)
        {
            this.btn.Content = "Thanks!";
        }
    }
}

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;//引用该命名空间

namespace WPF_Code
{
    //继承自Application
    class Program:Application
    {
        [STAThread()]//单线程单元不可少
        static void Main()//整个程序的入口
        {
            Program app_program = new Program();
            app_program.MainWindow = new MyWindow();//当前启动的窗体对象
            app_program.MainWindow.ShowDialog();//窗体以对话框形式启动
        }
    }
}

打开项目的属性,设置启动位置从Program启动

按下F5,显示结果

还可以动态的将XAML信息交给程序处理,动态生成相应的控件,将后端代码修改为

//需要引用以下三个命名空间
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;

namespace WPF_Code
{
    //当前类要继承处Window类
    class MyWindow : Window
    {
        //一个未实例化的按钮对象
        private Button btn;

        //当前窗体的构造函数
        public  MyWindow()
        {
            InitializeComponent();
        }

        //用于初始化窗体
        private void InitializeComponent()
        {
            //创建XAML
            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>";

            //指定XAML
            this.Content = XamlReader.Parse(xaml);
        }
    }
}

运行结果如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值