wpf-基础-初识xaml

目录

      • 基本概念
      • 项目结构说明
      • 区分Property和Attribute
      • MainWindow.xaml说明
      • 第一个例子:使用纯c#代码或纯xaml绘制矩形
      • xaml代码技巧

参考书目:深入浅出WPF完整版

基本概念

silverlight是wpf的一个子集(网络/简化版)。

wpf是数据驱动的。

事件驱动
用户每进行一个操作,会激发程序产生一个事件,然后响应事件的事件处理器就会执行。事件处理器是一个函数/方法。因此,数据是静态的、被动的,界面控件是主动的,界面逻辑与业务逻辑之间的桥梁是事件。
数据驱动
数据发生变化时,会主动通知界面控件,推动它展示最新数据。同时,用户对控件的操作也会直接送达数据。界面控件事件一般只参与界面逻辑,不会接触业务逻辑,使得程序复杂度降低。数据与界面之间的桥梁是Data Binding。

xaml只是一种设计UI的方法。wpf不一定需要xaml,因为可以用纯代码的方式创建页面。

项目结构说明

wpf-基础-初识xaml_第1张图片

  • Properties:资源和配置信息
  • References:引用的类库
  • App.xaml:程序主体,同时声明主窗口。它下面的App.xaml.cs是后台代码。
  • MainWindow.xaml:主窗口,它带的cs也是后台代码。

区分Property和Attribute

Property是针对对象而言的属性;Attribute是编程语言层面上的属性。标签式语言中的特征称为Attribute,像p的颜色,字号什么的。也就是说实体的特点映射为类的Property,类的Property则映射去xaml标签的Attribute(不止接收Property,可能还有别的)。

MainWindow.xaml说明

wpf-基础-初识xaml_第2张图片
第一行说明它关联的类是哪个,xmlns是定义命名空间的,格式是:xmlns[:可选的映射前缀]=“命名空间”
如果不加映射前缀,说明来自这个namespace的所有标签前都不用加前缀。这样的namespace是默认命名空间,只能有一个。

默认的几个其实也不是网址吧,就是hard-coding,解析器看到就会自动引用命名空间。

如果引用外来程序集(assembly),比如要用System.Windows.Controls的Button,需要在根元素的标签中加上:

xmlns:c="clr-namespace:System.Windows.Controls;assembly=PresentationFramework"

那么此时c是映射前缀,使用Button时就要写成< c:Button />

xaml和cs为什么能两次声明同一个类?

因为cs中声明用的是partial关键字,它可以把一个类拆到多处定义,只要各部分代码不冲突即可。

xaml为对象属性赋值有两种语法:1.使用字符串简单赋值;2.使用属性元素Property Element进行复杂赋值。

第一个例子:使用纯c#代码或纯xaml绘制矩形

  1. 使用字符串赋值
    <Grid VerticalAlignment="Center" HorizontalAlignment="Center">
        <Rectangle x:Name="rectangle" Width="200" Height="120" Fill="Blue"/>
    Grid>
  1. 使用属性元素
    <Grid VerticalAlignment="Center" HorizontalAlignment="Center">
        <Rectangle x:Name="rectangle" Width="200" Height="120">
            <Rectangle.Fill>
                <SolidColorBrush Color="Blue"/>
            Rectangle.Fill>
        Rectangle>
    Grid>
  1. 纯c#代码
    wpf-基础-初识xaml_第3张图片
    wpf-基础-初识xaml_第4张图片

也就是说,Rectangle.Fill其实是一个Brush类型的,Brush派生出这些。xaml用property element,其实用到的是c#的一些属性(Attribute对应Property了)。

xaml代码技巧

  1. 充分使用Attribute=Value直接赋值,避免使用Property Element方式。
  2. 充分使用默认值。
  3. XAML允许省略某些集合标签,允许直接把集合元素写在属性元素里。
  4. 复杂代码可以先在xaml里画(拖动),然后微调(有时候数值不需要那么精确)

你可能感兴趣的:(c#和WPF,c#,wpf)