WPF布局学习总结

WPF布局学习总结

模仿效果

今天系统学习了一下WPF的布局,模仿做了一个粗糙的CSDN主页,效果如图:
这里写图片描述

布局Control总结

用简短的话来概括精髓

布局原则

控件的Weight、Height除非需要,不要显示设置,灵活为上,更是为了自适应。

StackPanel

  1. 堆栈面板,占据一行或一列的时候使用
  2. 属性Orientation(方向),使内嵌所有子元素水平或竖直排列

WrapPanel

环绕面板,功能完全可替代StackPanel

不同的是,如果案例中右上角“搜索”后面还有元素,则会排列到第二行(IOS开发图片那行)

DockPanel

  1. 停靠面板,专门用于自适应(WinForm的人知道Dock)
  2. 内嵌所有子元素可以使用DockPlane.Dock.……来点出来上下左右四个方向来布局
  3. 最后一个元素填充剩余空间,需要在DockPlane上设置LastChildFill = false;

Grid

1.最复杂,设置Row和Colum来布局

 <!--定义列 2列--> 
 <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="80"/>
     <ColumnDefinition/>
 </Grid.ColumnDefinitions> 
 <!--定义行 3行--> 
 <Grid.RowDefinitions> 
     <RowDefinition Height="100"/>
     <RowDefinition />
     <RowDefinition />
 </Grid.RowDefinitions> 

1-1设置Row和Colum的尺寸有三种方式

<ColumnDefinition Width="80"/>  显示设置
<ColumnDefinition Width="Auto"/>设置自动
<ColumnDefinition Width="*"/>   等比例缩放(2*、3*)

1-2跨越行和列
假如我有一个5行3列的Grid,里面有个Button想填充前两3行2列,点出来Grid的属性来设置

<Button Grid.Row = 0 //从0行开始是第一行
        Grid.RowSpan = 3  //跨越3Grid.Row = 0 //从0列开始是第一列
        Grid.ColumSpan = 2 //跨越2

1-3尺寸共享(技巧)
我有两个Burton,在5行3列的Grid中,要求第一个Button在第一行第一列,第二个Button在第二行第一列,除了位置不同,尺寸是相同的

<Button Grid.Row = 0 Grid.Row = 0 />
<Button Grid.Row = 1 Grid.Row = 0 />
在设置Grid的行列尺寸处设置
 <!--定义行的地方--> 
 <Grid.RowDefinitions> 
     <RowDefinition Height="*" SharedSizeGruop= "设置一个名字"/>
     <RowDefinition Height="*" SharedSizeGruop ="和设置的名字一样便共享"/>

1-4设置行列不用写代码,直接拖(技巧)
新建项目的时候自带的是Grid,鼠标移到界面的上边框或者左边框的时候,鼠标变成三角,你在上部点一下,就是设置一列,在点一下就是设置一列,xaml的代码都省的你写了,行业一样

2.布局舍入
假如你的窗体尺寸是600,800,Grid自适应也是600,800,如果你设置了三行,等比例缩放是:,4:2*,就是1:4:2,但是行总长是600,无法整除7,所以在相邻行的地方是模糊的,因为WPF采用的是反锯齿的功能,在Grid处设置UseLayoutRounding = True关闭反锯齿

Canvas

1.更精确的布局,内嵌子元素可以设置Canvas.Left或者是上右下,就是距离Canvas的距离
2.内嵌子元素可以设置层次, ZIndex,默认是0,在Canvas中两个重叠的控件,Zindex大的显示,小的被遮住(这个属性是点不出来的)

InkCanvas

这个特别有意思,应该都玩过电脑自带附件中的画图工具吧,小时候玩的很嗨,这个控件就是简单的画图,也算是一个布局
1.这个控件在工具箱里找不出来,只能自己写
2.布局功能:放在这个控件中的子元素,也有Canvas的.Left……
还有在InkCanvas 的EditingMode设置为Select,可以在运行的时候修改子元素的尺寸以及删除,还是贴代码吧

<InkCanvas EditingMode="Select" >
   <Button Content="按钮" InkCanvas.Left="100" InkCanvas.Top="100"/>
</InkCanvas>

效果图:
这里写图片描述子元素一个按钮初始尺寸
这里写图片描述选中时的样子
这里写图片描述拖拉后的样子
3.画笔功能:
属性EditingMode =
Ink 正常画画
None 不支持画笔功能
EraseByPoint 像画画中的橡皮一样(左键变成橡皮咯)
EraseByStroke 删除笔画(你画了两下,用一下,就剩下第一笔了)
GestureOnly 画画后左键释放就不保留画的内容
附效果图一张:
这里写图片描述

结尾

每个控件有三个属性,布局时合理使用,
Marin设置四个方向的间隔 Margin=“0,0,0,0”
VerticalAlignment 垂直方向对齐
HorizontalAlignment水平方向对齐
像布局这些东西,还是自己去试试去玩玩,就心里有数了,别人玩呢,还是

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值