WPF学习历程1


x命名空间中的Attribute

x:Class

x:ClassModifier

x:Name 可申明变量 

<TextBox x:Name="txt_Name" Width="100" Margin="5" />


后台代码可直接调用

x:FiledModifier 设置访问级别,默认值是interal(只能在程序集访问);值public可跨程序集访问

x:Key 作用是为资源贴上用于检索的索引,资源集合,设置重复使用的内容,类似CSS

xaml代码

<Window.Resources>

<sys:String x:Key="myString">姓名</sys:String>

</Window.Resources>

<Label Content="{StaticResource ResourceKey=myString}" Width="100" BorderBrush="Blue" Background="#e6e628"></Label>

 

C#代码

string str = this.FindResource("myString") as string;
this.txtBox.Text = str;

x:Share 一定要与x:key配合使用,系统默认x:Share=”true”

 

x命名空间中的标记扩展

x:Type

x:Null

x:Array

x:Static 访问后台定义的静态static成员

Text="{x:Static local:MainWindow.ShowText}

 

XAML指令元素

x:code 可以包含一些后置代码的C#代码(不提倡)

x:XData 专用于提供XML化的数据

 

控件与布局

WPF的UI元素的类型

ContentControl 单一内容控件

HeaderedContentControl 带标题的单一内容控件

ItemsControl 以条目集合为内容的控件

HeaderedItemsControl 带标题的以条目集合为内容的控件

Decorator 控件装饰元素

Panel 面板类元素

Adorner 文字点缀元素

Flow Text 流式文本元素

TextBox 文本输入框

TextBlock 静态文本

Shape 图形元素

 

ContentControl

只能由单一元素充当内容(可用布局控件将多元素包装,再将布局控件作为单一元素写进去)

Button

ButtonBase

CheckBox

ComboBoxItem

ContentControl

Frame

GridViewColumnHeader

GroupItem

Lable

ListBoxItem

ListViewItem

NavigationWindow

RadioButton

RepeatButton

ScrollViewer

StatusBarItem

ToggleButton

ToolTip

UserControl

Window

 

HeaderedContentControl

内容属性为Content和Header,都只能容纳一个元素作为其内容

Expander

GroupBox

HeaderedContentControl

TabItem

 

ItemsControl

用于显示列表化的数据

内容属性为Items或ItemsSourse

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

Menu

MenuBase

ContextMenu

ComboBox

ItemsControl

ListBox

ListView

TabControl

TreeView

Selector

StatusBar

 

ListBox可添加更多的元素checkbox,button等(区别于WinForm,Asp.NET)

ListBox

        public MainWindow()

{

InitializeComponent();

this.ListBoxEmployee.DisplayMemberPath = "Name";

this.ListBoxEmployee.SelectedValuePath = "ID";

this.ListBoxEmployee.ItemsSource = empList;

}



public class Employee

{

public int ID { set; get; }

public string Name { get; set; }

public int Age { get; set; }

}

List<Employee> empList = new List<Employee>()

{

new Employee(){ID=1,Name="盖茨",Age=55},

new Employee(){ID=2,Name="乔布斯",Age=57},

new Employee(){ID=3,Name="扎克伯格",Age=28},

};

 

ItemsControl名称

对应的Item container

Combox

Com

ContextMenu

MenuItem

ListBox

ListBoxItem

listView

ListViewItem

Menu

MenuItem

StatusBar

StatusBarItem

TabControl

TabItem

TreeView

TreeViewItem

 

 

HeaderedItemsControl

内容属性有Items,ItemsSourse,Header

MenuItem

TreeViewItem

ToolBar

 

Decorator

改类元素在UI上起装饰效果

内容属性 Child

只能由单一元素充当内容

ButtonChrome

ClassicBorderDecorator

ListBoxChrom

SystemDropShadowChrome

Border

InlPresenter

BulletDecorator

Viewbox

AdornerDecorator

 

 

 

 

TextBlock和TextBox

TextBlock不可编辑(静态文本框),可使用丰富的印刷级的格式控制标记显示专业的排版效果

内容属性有Inlines(“行”),Text

 

 

Shape

用于2D图形绘制

无内容属性

使用Fill属性设置填充,使用Stroke属性设置边线

不是控件,只是简单的视觉元素,专门用来在UI上绘图的一类元素

 

Panel

所有用于UI布局的元素都属于这一族

内容属性Children

内容可以是多个元素,Panel元素将控制他们的布局

Canvas

DockPanel

Grid

TabPanel

ToolBarOverflowPanel

StackPanel

ToolBarpanel

UniformGrid

VirtualizingPanel

VirtualizingStackPanel

WrapPanel

 

 

Grid

属性ColumnDefinitions,RowDefinitions,分别是ColumnDefinition,RowDefinition的集合

静态布局:

        <Grid.ColumnDefinitions>

<ColumnDefinition></ColumnDefinition>

</Grid.ColumnDefinitions>

<Grid.RowDefinitions>

<RowDefinition></RowDefinition>

</Grid.RowDefinitions>

 

 

动态布局(c#)

            this.gridMain.ColumnDefinitions.Add(new ColumnDefinition());

this.gridMain.RowDefinitions.Add(new RowDefinition());

this.gridMain.ShowGridLines = true;//显示横线

 

Grid的高度和宽度

*绝对值

*比例值 数值后加(“*”)

*自动值

例子(xaml)

    <Grid>

<Grid.ColumnDefinitions>

<ColumnDefinition Width="Auto" MinWidth="120"></ColumnDefinition>

<ColumnDefinition Width="*"></ColumnDefinition>

<ColumnDefinition Width="80"></ColumnDefinition>

<ColumnDefinition Width="4"></ColumnDefinition>

<ColumnDefinition Width="80"></ColumnDefinition>

</Grid.ColumnDefinitions>

<Grid.RowDefinitions>

<RowDefinition Height="25"></RowDefinition>

<RowDefinition Height="4"></RowDefinition>

<RowDefinition Height="*"></RowDefinition>

<RowDefinition Height="4"></RowDefinition>

<RowDefinition Height="25"></RowDefinition>

</Grid.RowDefinitions>



<TextBlock Text="请选择您的部门并留言:" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center"></TextBlock>

<ComboBox Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="4">

</ComboBox>

<TextBox Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="5" BorderBrush="blue"></TextBox>

<Button Content="提交" Grid.Column="2" Grid.Row="4"></Button>

<Button Content="清除" Grid.Column="4" Grid.Row="4"></Button>

</Grid>

                                                                                

                                                                    

 

StackPanel

同类元素需要经凑排列(如制作菜单或列表)

移动其中的元素后能够自动补缺的布局或动画

属性有三个:Orientation,HorizontalAlignment和VerticalAlignment

属性名称

数据类型

可取值

描述

Orientation

Orientation枚举

Horizontal

Vertical

决定内部元素是横向累积还是纵向累积

HorizontalAlignment

HorizontalAlignment枚举

Left,Center

Right,Strech

决定内部元素水平方向上的对齐方式

VerticalAlignment

VerticalAlignment

枚举

Top,Center

Bottom,stretch

决定内部元素竖直方向上的对齐方式

 

  <Grid>
<GroupBox Header="请选择没有错别字的成语" BorderBrush="Blue" Margin="5"></GroupBox>
<StackPanel Margin="5">
<CheckBox Content="A.iPhone5" Margin="0 20 0 0"></CheckBox>
<CheckBox Content="B.Lumia900"></CheckBox>
<CheckBox Content="C.HTC"></CheckBox>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button Content="确定" Width="60" Margin="5"></Button>
<Button Content="清空" Width="60" Margin="5"></Button>
</StackPanel>
</StackPanel>
</Grid>

 

                                                          

 

Canvas

译成“画布“

一经设计基本上不会再有改动的小型布局(如图标)

艺术性比较强的布局

需要大量使用横纵坐标进行绝对点定位的布局

依赖横纵坐标的动画

属性有 Canvas.X,Canvas.Y

eg(xaml)

    <Canvas>
<TextBlock Text="用户名:" Canvas.Left="12" Canvas.Top="12"></TextBlock>
<TextBox Width="200" Canvas.Left="65" Canvas.Top="9"></TextBox>
<TextBlock Text="密码:" Canvas.Left="12" Canvas.Top="41" Height="16" Width="36"></TextBlock>
<TextBox Width="200" Canvas.Left="65" Canvas.Top="38"></TextBox>
</Canvas>

                                                   

DockPanel

属性:DockPanel.Dock 枚举  Left,Top,Right,Bottom

根据Dock属性值,DockPanel内的元素会向指定方向积累,切分DockPanel内部的剩余空间

最后一个元素的DockPanel.Dock被忽略,最后填满剩余空间

还有的就是DockPanel的LastChildFill属性,默认值为true,决定最后元素是否填充

 

    <Grid>
<DockPanel>
<TextBox DockPanel.Dock="Top" Height="25" Background="Black"></TextBox>
<TextBox DockPanel.Dock="Left" Width="150" Background="Blue"></TextBox>
<TextBox Background="Yellow"></TextBox>
</DockPanel>
</Grid>

                                                       

 

补充:(实现可拖曳的分隔栏,让用户能调整TextBox的宽度,DockPanel不具备这样的功能,使用Grid和GridSplitter实现)

    <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Grid.ColumnSpan="3" Background="Black"></TextBox>
<TextBox Grid.Row="1" Background="Blue"></TextBox>
<GridSplitter Grid.Row="1" Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Center"
Width
="5" Background="Red" ShowsPreview="True"></GridSplitter>
<TextBox Grid.Row="1" Grid.Column="2" Background="Yellow"></TextBox>
</Grid>

                                      

WrapPanel

内部采用的是流式布局

属性Orientation控制流延伸的方向

属性HorizontalAlignment和VerticalAlignment控制内部控件的对齐

子啊流延伸的方向上,WrapPanel会用尽可能多的控件,排不下的控件将会新起一行或一列继续排列

 

    <WrapPanel>
<Button Content="OK" Width="80" Height="30"></Button>
<Button Content="OK" Width="80" Height="30"></Button>
<Button Content="OK" Width="80" Height="30"></Button>
<Button Content="OK" Width="80" Height="30"></Button>
<Button Content="OK" Width="80" Height="30"></Button>
</WrapPanel>

                                    

 

posted @ 2012-02-26 15:46  Ghost Soar  阅读(661)  评论(0编辑  收藏