1. 程式人生 > >WPF之路-從XAML入手

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

執行結果如下: