WPF学习感悟

5 篇文章 1 订阅

四、X:命名空间

1、Property和Attribute

如书中所说,attribute是语言层面的东西,是给编译器看的。property是面向对象层的东西,是给编程逻辑看的。、XAML标签中的attribute大部分对应着对象的property。

4.1Attribute

4.1.1 X:class 

这个attribute是告诉XAML编译器将XAML标签的编译结果与后台代码中指定类合并,使用要求:

 

  1. 这个attribute只能用于根节点;
  2. 使用X:class的根节点的类型与X:Class的值所指示的类型保持一致;
  3. X:Class的值所指示的类型在声明时必须使用partial关键字;

4.1.2 X:ClassModifer

这个attribute是告诉XAML编译器由标签编译生成的类具有怎样打访问控制级别。使用时注意:

 

  1. 标签必须具有X:Class attribute;
  2. X:ClassModifier的值必须与X:Class所指示的访问控制级别一致;
  3. X:ClassModifier的值随后台代码的编译语言不通而不同,参见TypeAttribute枚举类型;

4.1.3 X:Name

在C#中,集合索引器又称为“带参数的属性”

需要为对象准备一个引用变量以便在C#代码中直接访问就必须显式的告诉XAML编译器——为这个独享声明引用变量,这个时候就引用X:Name。

使用name和X:name效果在wpf中一致,只是如果没有name属性的元素为了成功创建访问代码只能用X:name。

4.1.4 X:FieldModifier

用于更改X:name的访问级别。

4.1.5 X:Key

为资源贴上检索的索引。

4.1.6 X:Shared

用于检索资源时确定对象是副本还是本身,和X:Key配合使用

4.2命名空间的标记扩展(Markup Extension)

4.2.1 X:Type

在编程中操作的是数据类型的实例或者实例的引用,X:Type的值是数据类型的名称。

“类” 这个名词而言,它具有双重身份:逻辑层面上类是现实世界对象经过抽象和封装后的结果;在变成层面上,我们会使用这个类去创建对象和引用。当我们以一个类去创建对象的时候,编译器会以这个类为蓝本、按照累的成员的多寡在内存中开辟出相应大小的一块内存,并用程序员指定的构造器刷新(初始化)这块内存,这时候,类所充当的角色就是对象的“模具”,它创建的对象在型号和内部布局上完全一样。这个层面上我们把类称作数据类型(Type)。

4.2.2 X:Null

显式的对要给属性赋空值,C#中使用null关键字表示空值,XAML用来表示空值的是X:Null。

<Window 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Rubber_Sucker_Assemble.Form"
        mc:Ignorable="d"
        Title="WindowDemo" Height="450" Width="800">

    <Window.Resources>
        <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
            <Setter Property="Width" Value="60" />
            <Setter Property="Height" Value="36"></Setter>
            <Setter Property="Margin" Value="5"></Setter>
        </Style>
    </Window.Resources>
    
    <Grid>
        
        
        <Button HorizontalAlignment="Left" Margin="545,215,0,0" VerticalAlignment="Top" Width="75">
            <Button Content="Button" Width="75" Height="50" Click="Button_Click"/>
        </Button>


        <StackPanel Background="LightBlue">
            <TextBox Height="23" Name="textBox" Width="200" HorizontalAlignment="Left" Margin="15"/>
            <TextBox Height="23" Name="textBox2" Width="200" HorizontalAlignment="Left" Margin="15"/>
            <TextBox Height="23" Name="textBox3" Width="200" HorizontalAlignment="Left" Margin="15"/>

            <TextBox Height="23" Name="textBox1" Width="200" Margin="20"/>
            <Slider Height="23" Name="slider1" Width="219" Maximum="100" />
            <Button Content="Button" Margin="0" Width="Auto" d:LayoutOverrides="Height"/>
            <Button Content="Button" Margin="0" Width="Auto" d:LayoutOverrides="Height"/>
            <Button Content="Button" Margin="0" Width="Auto" d:LayoutOverrides="Height"/>
            <Button Style="{x:Null}" Content="Button" Margin="0" Width="Auto" d:LayoutOverrides="Height"/>

        </StackPanel>
        <StackPanel HorizontalAlignment="Left" Height="100" Margin="97,251,0,0" VerticalAlignment="Top" Width="100"/>


    </Grid>

    <!--<Grid>
        <TextBox HorizontalAlignment="Left" Name="textBox1" Height="23" Margin="40,110,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="240"/>
        <TextBox HorizontalAlignment="Left" Name="textBox2"  Height="23" Margin="40,190,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="240"/>
        <TextBox HorizontalAlignment="Left" Name="textBox3" Height="23" Margin="40,270,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="240"/>

        <StackPanel Width="409" Height="331" Background="LightBlue">
            <ListView Height="302" x:Name="listView1" Width="396" Margin="6,0,7,0">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="ID" DisplayMemberBinding="{Binding XPath=@id}" Width="80"/>
                        <GridViewColumn Header="Name" DisplayMemberBinding="{Binding XPath=Name}" Width="150"/>
                    </GridView>
                </ListView.View>
            </ListView>
        </StackPanel>

    </Grid>-->
</Window>

4.2.3 X:Array

X:Array的作用是通过它的items属性向使用者暴露一个类型已知的ArrayList实例,ArrayList内成员的类型由X:Array的Type指明,下面是将X:Array当做数据源向ListBox提供数据。

 <ListBox x:Name="listBox" ItemsSource="{x:Array Type=sys:String}" HorizontalAlignment="Left" Height="100" Margin="0,251,0,0" VerticalAlignment="Top" Width="792"/>

 

<!--<ListBox Width="100" Height="100">
            <ListBox.ItemsSource>
                <x:Array Type="sys:String">
                    <sys:String>Tim</sys:String>
                    <sys:String>Tom</sys:String>
                    <sys:String>Victor</sys:String>
                </x:Array>
            </ListBox.ItemsSource>
        </ListBox>-->

4.2.5X:Static

功能是在XAML文档中使用数据类型的static成员,因为XAML不能写。逻辑代码,所以X:Stati用来访问static成员一定是数据类型的属性或文档。

4.3 XAML指令元素

4.3.1X:Data

        <XmlDataProvider x:Key="TextBox1" XPath="">
            <x:XData>
                <SuperMarket xmls="">
                    <fruits>
                        <Fruit Name="Peach"></Fruit>
                        <Fruit Name="Banana"></Fruit>
                        <Fruit Name="Orange"></Fruit>
                    </fruits>
                    <drinks>
                        <drink Name="Coca Cola"></drink>
                        <drink Name="PEPSI "></drink>
                    </drinks>
                </SuperMarket>
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>

 

五 控件与布局

WPF把那些能够展示数据、响应用户操作的UI元素称为控件。

控件所显示的数据,称为“数据内容”。控件分为:

 

  1. 布局控件:可以容纳多个控件或者嵌套多个其他控件,用于在UI上进行显示布局的控件:Grid、StackPanel、DockPanel,拥有共同父类panel;
  2. 内容控件:只能容纳一个其他控件或控件布局内容作为其内容,Window、Button属于此类;拥有共同父类ContentPanel;
  3. 带标题内容控件:相当于内容控件,但是可以添加一个Header,标题部分亦可容纳一个标题或控件。GroupBox、TabItem,共同父类HeaderedContentControl;
  4. 条目控件:显示一列数据,ListBox、ComboBox.共同父类ItemsControl,显示数据集合功能强大;
  5. 带标题条目控件:相当于一个条目控件加标题,TreeViewItem、MenuItem都属于此类,共同父类HeaderItemControl;
  6. 特殊内容控件;TextBox、TextBlock、Iamge等相对独立控件。

 

5.2 WPF的内容模型

控件的嵌套被称为子集控件,不考虑内部组成结构,只考虑由控件组成的树那么这棵树被称为逻辑树(Logical Tree)。加上内容后被称为可视元素树(Visual Tree)

5.3各类模型详解

5.3.1contentControl族

特点:均派生自contentcontrol类、它们都是控件、内容属性的名称为content、只能由单一元素充当内容;

Button控件属于这一族,不能既包含文字又包含图片。

contentcontrol族包含的组件如下:

5.3.2 HeaderedContentControl族

特点如下:

1、都派生自HeaderContentControl类,其派生自ContentControl类;

2、它们都是控件,用于显示带标题的数据;

3、除了用于显示主内容的区域外,控件还具有显示标题的区域;

4、内容属性为content或control;

5、无论是content还是header都只是只能容纳一个元素作为其内容。

        <GroupBox HorizontalAlignment="Left" Height="69" Margin="368,141,0,0" VerticalAlignment="Top" Width="214">
            <GroupBox.Header>
                <Image HorizontalAlignment="Left" Source="pack://application:,,,/Reference/Icon/PNG/机器人_3.png" Height="35" VerticalAlignment="Top" Width="41"/>
            </GroupBox.Header>

        </GroupBox>
        <TextBox Text="Hello ThreeS" HorizontalAlignment="Left" Height="45" Margin="368,238,0,0" TextWrapping="Wrap"  VerticalAlignment="Top" Width="214"/>

5.3.3 ItemsControl

特点如下:

1、均派生自ItemsControl类;

2、它们都是控件、用于显示列表化的数据;

3、内容属性为items或itemsSource;

4、每种ItemsControl都对应有自己的条目容器(Item  Contain)

5.3.4 HeaderedItemsControl族

特点如下:

1、均派生自HeaderedItemsControl类;

2、它们都是控件,用于显示列表化的数据,同时可以显示一个标题;

3、内容属性为Items、ItemsSource和header;

5.3.5 Decorator族

在UI上起装饰效果,ViewBox元素;特点如下:

1、均派生自Decorator;

2、起UI装饰作用;

3、内容属性为Child;

4、只能单一元素充当内容。

5.3.6  TextBox和TextBlock

TextBlock只能显示文本,不能编辑,称为静态文本,可以使用印刷级的格式控制标记。

TextBox允许用户编辑简单的文本。

5.3.7 shape族

用于在UI进行绘图的元素,特点如下:

1、均派生自shape类;

2、用于2D图形绘制;

3、无内容属性;

4、使用Fill属性设置填充,使用stroke属性设置边线。

5.3.8 panel元素

所以UI元素均属于这一族,特点如下:

1、均派生自Panel抽象类;

2、主要内容是控制UI布局;

3、内容属性为child;

4、内容可以是多个元素,panel元素将控制它们的布局。

5.4 UI布局(Layout)

5.4.1 布局元素

 

  • Grid:网格。可以自定义行列,通过设置数量、行高、列宽来调整控件的布局,近似与HTML中的table;
  • Stack Panel:栈式面板,可以将包含的元素在竖直或者水平方向上排成一条直线,当移除一个元素后,后面的元素会自动向前移动;
  • Canvas:画布,内部元素可以使用以像素为单位的绝对坐标进行定位,类似Winform编程。
  • DockPanel:靠泊式画板,内部元素可以进行选择靠泊,类似Winform中Dock用法;
  • WrapPanel:自动折行面板,内部元素在拍满一行后能够自行换行,类似网页Flex布局。

 

 

5.4.2 Grid

5.4.3 StackPanel

5.4.4 Canvas

5.4.5DockPanel

5.4.6 WrapPanel 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值