wpf--控件

wpf 是数据驱动ui,数据是核心,是主动的,ui从属于数据并表达数据,是被动的   我们用ui元素响应用户的操作,wpf把那些能够展示数据,响应用户操作的ui元素称为控件control

 在wpf中,我们关注的是抽象的数据和行为而不是控件的具体形象。    日常生活中经常遇到的控件,有6类:  1.布局控件 Grid ,StackPanel,DockPanel   父类是panel  2.内容控件 只能容纳一个其他空间或者布局控件作为他的内容,window,button  3.带标题内容控件  4.条目控件  可以显示一列数据,一般情况这列数据的类型相同 listBox,ComBox 他们的共同基类是ItemsControl  5.带标题条目控件    可以把控件想象成一个容器,容器里面装的东西就是它的内容,控件的内容可以是数据也可以是控件,若是控件的话,就 形成了树形结构,称为逻辑树(logical tree)  wpf 控件往往由更基本的控件组成,这棵树为可视元素树。

 控件是内存中的对象,其内容也是内存的对象  内容属性有自己确切的名称:有的叫content 有的叫child    各类内容模型详解

 1  contentControl   button是这类,只能由一个元素充当内容  如,一个button内容既有内容又有图片是不行的  但是我们可以用一个包含多个元素布局控件包装他们就可以了。再用这个布局控件作为button内容就可以了 2. HeaderedContentControl 族

 内容属性为content和header  无论是哪一个,都只能容纳一个元素作为他的内容 3.ItemsControl  用于显示列表化数据  内容属性为item或者itemsource 典型是listbox 4.HeaderedItemsControl 族  内容属性为items,itemSource,Header   本族控件只有3个 menuItem,TreeViewItem,ToolBar 5.decorator 起ui装饰作用   内容属性为child  只能由单一元素充当内容 6.TextBlock 和TextBox Textblock 只显示文本,不能编辑,静态文本,但可以使用丰富的印刷级的格式控制标记显示转移的排版效果 7.Shape元素     他们只是简单的视觉元素,不是控件,他们没有自己的内容,用fill属性为他们设置填充效果 可以用stroke属性为他们设置边线效果  8.Panel 族  内容属性为children   内容可以是多个元素,panel元素将控制他们的布局   布局:  布局元素: grid stackpanel canvas dockpanel wrappanel(自动折行面板)类似HTML中的流式布局

 Grid 类   具有columnDefinitions 和RowDefinition 2个属性 他们分别是 columnDefinitions 和RowDefinition 的集合。 绝对值: double数值加单位后缀  比例值: double数值加一个星号  自动值:字符串加auto

比例的最大特点是ui的整体尺寸改版后,会保持固有的比例 Grid ShowGridLines="true"   grid 布局 一个常见的错误: margin 指可视化元素四周距离其容器的距离  按照 左上右下 一般性布局 height+width+margin 就可以了  如果布局复杂,就不推荐用这个方法。 Grid.rowspan="行数"  若控件需要跨多个行或者列就这样做。  这类依控件所处环境而被容器附加上的属性有个专门的名字===附加属性。   如果把两个元素放在grid的同一个单元格内,则代码中后书写的元素将覆盖原来先写的代码,要把 盖的元素显示出来 ,可以用visibility设置为hidden或collapsed(收缩) 也可以把opacity属性设置为0 3. StackPanel 控件   orientation HorizontaAlignment 和VerticalAlignment 三个属性组合出各种排列和对齐方式 4.canvas 如果布局以后不会改变并且窗体尺寸固定,不然还是用grid布局弹性更好 5.dock panel  停靠面板 他有一个重要的属性  bool类型的lastchildfill,它的默认是true,当 lastchildfill 属性为true,则dockpanel内最后一个元素dockpanel。dock属性会被忽略 dock 枚举类型没有fill这个值

<Window x:Class="WpfApplication3.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="25"/>
          <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="150"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <TextBox Grid.ColumnSpan="3" BorderBrush="Black"/>
        <TextBox Grid.Row="1" BorderBrush="Black"/>
        <GridSplitter Grid.Row="1" Grid.Column="1"
                      VerticalAlignment="Stretch" HorizontalAlignment="Center"
                      Width="5" Background="Gray" ShowsPreview="True"/>
        <TextBox Grid.Row="1" Grid.Column="2" BorderBrush="Black"/>
        
    </Grid>
</Window>

 

6.wrappanel 采用流式布局 wrappanel属性来控制流延伸的方向,wrappanel会排列尽可能多的控件,排不下的控件将会新起一行或列继续排列 改变窗体的尺寸,wrappanel会调整内部控件的排列

posted @ 2012-08-14 11:25  小薇林  阅读(340)  评论(0编辑  收藏  举报