zoukankan      html  css  js  c++  java
  • WPF2 XAML本质

    每一个新建的WPF程序,核心部分包括:

    1、Properties:程序会用到的一些资源(图标、图片、静态字符串)和配置信息

    2、引用:标记当前项目需要引用哪些其他项目。

    3、App.xaml:程序主体,App.xaml文件用于声明程序进程会是谁,同时指定程序主窗体是谁。

    4、MainWindow.xaml:程序主窗体。

    xaml文件都会带有xaml.cs文件。

    重点是MainWindow.xaml。

    <Window x:Class="WPF_1_XAML.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>

    xaml是xml的派生语言,很多概念彼此通用。要注意,每个标签都会对应内存中的一个对象。

    xaml包括2种写法:

    1、非空标签:<Tag Attribute1=Value1 Attribute2=Value2>Content</Tag>

    2、空标签:<Tag Attribute1=Value1 />

    Property是一类抽象事物所具有的特性,Attribute则是为了区分同类元素A和B的区别特征。

    一、xmlns

    xmlns特征用来定义命名空间,语法特征为:xmlns [:可选的映射前缀]="命名空间"。

    如果不使用映射前缀,那么所有来自于这个命名空间的标签前都不用加前缀,这个没有映射前缀的命名空间被称为“默认命名空间”,它只能有一个,一般会选择使用频率最高的命名空间来充当默认命名空间。

    <Window>和<Grid>都来自于xmlns所在的默认命名空间。

    而第一行的Class特征则来自于第三行中x:前缀对应的命名空间。如果修改了默认命名空间,比如加入了前缀,那么它对应的xaml元素也要一并加入前缀。

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

    如果要引用外来程序集,比如System.Windows.Controls命名空间里的Button类,则先要把包含System.Windows.Controls命名空间的程序集PresentationFramework.dll通过引用的方式引用到项目中,然后再在根元素的起始标签中写上一句:xmlns:c="clr-namespace:System.Windows.Controls;assembly=PresentationFramework",当然编译器会自动补全这一串。

    其中类似http://,,,这一类的xmlns被称为硬编码,它会把一系列必要的程序集和.NET命名空间包含进来,注意是一系列而不是一个。

    x:Class=“WPF_1_XAML.MainWindow”这个Attribute的作用是当xaml解析器将包含它的标签解析成C#类后,这个类的类名是什么。因此,如果删除x:Class和cs中InitializeComponent,程序还是可以运行的,因为App.xaml中指定了StartupUri="MainWindow.xaml",而如果恢复x:Class这一行,但改名为MainWindow1.xaml,再编译,生成的就是MainWindow1为名的窗体。

    再注意到,MainWindow.xaml.cs中有一个partial关键字,于是其核心意义就很明显了:

        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
        }

    XAML解析生成的类和对应XAML.CS的类都是MainWindow的部分类,正是由于这种partial机制,类的逻辑代码留在了xaml.cs中,而与声明和布局相关的UI被分离到xaml中,实现了UI和逻辑的分离。

  • 相关阅读:
    Python资源大全中文版
    Python数据结构之字符串
    一头扎进Node系列
    MySQL的安装配置与卸载
    编程日常单词
    ping请求找不到主机 请检查该名称
    Node项目日志管理
    Node版本控制利器
    JavaScript 数据去重的常用几种方法
    一头扎进Node(一)
  • 原文地址:https://www.cnblogs.com/NicolasLiaoran/p/12982240.html
Copyright © 2011-2022 走看看