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>
                                     
                
            
        
浙公网安备 33010602011771号