wpf第二章布局_第1页
wpf第二章布局_第2页
wpf第二章布局_第3页
wpf第二章布局_第4页
wpf第二章布局_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、布局与输入1. 布局基础a WPF提供了一套面板(Panel),它们是一系列具有特殊用途的用户界面元素b StackPanel-栈面板 WrapPanel环绕模板 DockPanel停靠模板 Grid网格 Canvas 画布 UniformGrid 均布网格c 以上描述了WPF中的主要面板类型,无论使用哪种面板,它们都遵循相同的基本规则:元素的位置通常是由包含它们的面板所定 2. 栈面板a 是一种非常简洁的面板,它的作用是将所包含的元素按一行或一列的方式排列。通常不会用栈面板来布局整个用户界面。它的最大用途就是排列一些比较小的元素,好比html里的ul无序列表WPF通过两种方法来解决元素的布局

2、问题,该策略取决于可用空间大小是否固定。SizeToContent="Height"设置某个空间的大小是不是由内容制定 相关的属性还有margin 和 padding,这样设置的控件都会通过窗体大小的变化而产生相应的变化,该值与设备无关如果设置height 和 width则是固定大小3. DockPanela 为了满足Dock的停靠要求必须在子控件上使用附加属性。DockPanel.Dock4. WrapPanel环绕面板a 通过Orientation属性设置排列的方向和栈面板类似不过环绕面板到最后的时候会自动换行,很类似listview5. 画布Canvasa 是面板中比

3、较简单的一种b 类似html中的绝对定位后通过横纵坐标控制其位置(附加属性Canvas.Left 和Canvas.Top Canvas.Right Canvas.Bottom)该值与设备无关6. InkCanvas允许画笔的Canvas在WPF中实现允许使用墨迹的控件。如:1: <Window x:Class="WPFLayoutDemo.InkCanvasDemo"2: xmlns="3: xmlns:x="4: Title="InkCanvasDemo" Height="200" Width="

4、300">5: <InkCanvas>6: <InkCanvas.DefaultDrawingAttributes>7: <DrawingAttributes Color="Red" />8: InkCanvas.DefaultDrawingAttributes>9: <Image Width="155" Height="155" InkCanvas.Left="10" InkCanvas.Top="10" 10: Source=&

5、quot;Logo2.png"/>11: InkCanvas>12: Window>其他的功能与Canvas相近。7. Grid网格 a 网格是所有面板用最常用也最复杂的布局面板b 类似的是Html中的Table标签也有行,单元格,跨行,跨列之说c 思考:如上图所示如何把里面的信息分成左右两部分的?用栈面板可以实现么?d 尝试下stackpanel的布局是否可以实现e 经过上面的尝试我们已经可以看出stackpanel如果这么使用的话是非常蹩脚的。而且很低效f Grid网格面板就可以轻易解决(table不就很easy嘛)g 画分割线的话可以弄个很窄的行填充一个矩形即

6、可h 加背景样式可以用border控件可以使用GridSplit控件结合Grid控件实现类似于Windows应用程序中SplitContainer的功能,如下面的应用程序:要实现以下的功能: ButtonA和ButtonB、ButtonC组成的整体,可以左右拖动,改变两者的宽度 ButtonB和ButtonC可以上下拖动,改变两者的高度 实现以上功能的XAML代码如下:1: <Grid>2: <Grid.ColumnDefinitions>3: <ColumnDefinition Width="88*" />4: <ColumnDe

7、finition Width="Auto" />5: <ColumnDefinition Width="190*" />6: Grid.ColumnDefinitions>7: <Grid.RowDefinitions>8: <RowDefinition Height="172*" />9: <RowDefinition Height="Auto" />10: <RowDefinition Height="90*" />11

8、: Grid.RowDefinitions>12: 13: <Button Content="ButtonA" Margin="3" Grid.Row="0" Grid.Column="0" Grid.RowSpan="3" />14: <Button Content="ButtonB" Margin="3" Grid.Row="0" Grid.Column="2" />15: <

9、Button Content="ButtonC" Margin="3" Grid.Row="2" Grid.Column="2" />16: 17: <GridSplitter Width="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 18: Grid.Row="0" Grid.Column="1" Grid.RowSpan=&

10、quot;3"> GridSplitter>19: <GridSplitter Height="3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 20: Grid.Row="1" Grid.Column="2"> GridSplitter>21: Grid>其核心想法为: 定义3*3的表格,其中放置分割线的列(下标为1)和行(下标为1)的宽度和高度设置为Auto ButtonA放置在Row=0、Column=0、RowSpan3的单元格中 ButtonB放置在Row=0、Column=2的单元格中 ButtonC放置在Row=2、Column=2的单元格中 竖直分割线放置在Row=0、Column=1、ColSpan3的单元格中 水平分割线放置在Row=1、Column=2的单元格中 如下图所示:8. 均布Grid 聪明的grida 通过设置Rows和Columns即可甚至可以不设置9. ViewBox视图框a S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论