翼度科技»论坛 编程开发 .net 查看内容

Wpf基础入门——容器Panel篇

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
WPF布局基础

WPF的布局原则


  • 一个窗口中只能包含一个元素
  • 不应显示设置元素尺寸
  • 不应使用坐标设置元素的位置
  • 可以嵌套布局容器
WPF有哪些布局容器?


  • Grid:网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。近似于HTML中的Table。
  • StackPanel:栈式面板。可将包含的元素在竖直或水平方向上排成一条直线,当移除一个元素后,后面的元素会自动向前移动以填充空缺。
  • Canvas:画布。内部元素可以使用以像素为单位的绝对坐标进行定位,类似于WindowsForm编程的布局方式。
  • DockPanel:泊靠式面板。内部元素可以选择泊靠方向,类似于在 Windows Form编程中设置控件的 Dock属性。
  • WrapPanel:自动折行面板。内部元素在排满一行后能够自动折行,类似于HTML中的流式布局。
布局容器详解

Grid

Grid的特点如下:

  • 可以定义任意数晁的行和列, 非常灵活。
  • 行的高度和列的宽度可以使用绝对数值、相对比例或自动调整的方式进行精确设定,并可设置最大和最小值。
  • 内部元素可以设置自己的所在的行和列, 还可以设置自己纵向跨几行、横向跨儿列。
  • 可以设置Children 元素的对齐方向。
基于这些特点, Grid适用的场合有:

  • UI布局的大框架设计。
  • 大量UI元素需要成行或者成列对齐的情况。
  • UI整体尺寸改变时, 元素需要保持固有的高度和宽度比例。
  • UI后期可能有较大变更或扩展。
StackPanel

StackPanel可以把内部元素在纵向或横向上紧凑排列、形成栈式布局,通俗地讲就是把内部元素像垒积木一样“撂起来”。垒积木大家都玩过,当把排在前面的积木块抽掉之后排在它后面的元素会整体向前移动、补占原有元素的空间
注意:在容器的可用尺寸内放置有限个元素,元素的尺寸总和(长/高)不允许超过StackPanel的尺寸, 否则超出的部分不可见。
基于这个特点,StackPanel适合的场合有:

  • 同类元素需要紧凑排列(如制作菜单或者列表)。
  • 移除其中的元素后能够自动补缺的布局或者动画。
StackPanel的三个属性:

  • Orientation
  • HorizontalAlignment
  • VerticalAlignment
Canvas

Canvas译成中文就是“画布”,显然,在Canvas里布局就像在画布上画控件一样。使用Canvas布局与在Windows Form窗体上布局基本上是一样的,当控件被放置在Canvas里时就会被附加上 Canvas.X和 Canvas.Y属性。
Canvas很容易被从Windows Form迁移过来的程序员所滥用,实际上大多数时候我们都可以使用Grid或StackPanel等布局元素产生更简洁的布局。
想要显露盖在下面的元素,可以在代码中修改上面元素的 Visibility属性值或Opacity属性值。
Canvas适用的场合包括:平时很少使用

  • 一经设计基本上不会再有改动的小型布局(如图标)。
  • 艺术性比较强的布局。
  • 需要大量使用横纵坐标进行绝对点定位的布局。
  • 依赖于横纵坐标的动画。
DockPanel

DockPanel内的元素会被附加上 DockPanel.Dock这个属性,这个属性可取Left、Top、Right和 Bottom 四个值。根据Dock属性值,DockPanel内的元素会向指定方向累积、切分DockPanel 内部的剩余可用空间,就像船舶靠岸一样。
DockPanel还有一个重要属性——bool类型的LastChildFill,它的默认值是True。当LastChildFill属性的值为True时,DockPanel内最后一个元素的 DockPanel.Dock 属性值会被忽略,这个元素会把DockPanel内部所有剩余空间充满。这也正好解释了为什么Dock 枚举类型没有Fill 这个值。
WarpPanel

WrapPanel内部采用的是流式布局。WrapPanel使用Orientation属性来控制流延伸的方向,使用HorizontalAlignmentVerticalAlignment两个属性控制内部控件的对齐。
在流延伸的方向上,WrapPanel会排列尽可能多的控件,排不下的控件将会新起一行或一列继续排列
代码演示

项目源代码下载地址
  1.    
  2.     <Grid>
  3.         
  4.         <Grid.RowDefinitions>
  5.             <RowDefinition />
  6.             <RowDefinition />
  7.             <RowDefinition />
  8.         </Grid.RowDefinitions>
  9.         <Grid.ColumnDefinitions>
  10.             <ColumnDefinition />
  11.             <ColumnDefinition />
  12.         </Grid.ColumnDefinitions>
  13.         
  14.         <Grid Grid.Row="0"
  15.               Grid.Column="0">
  16.             
  17.             <Grid.RowDefinitions>
  18.                 <RowDefinition Height="*" />
  19.                 <RowDefinition Height="2*" />
  20.             </Grid.RowDefinitions>
  21.             <Grid.ColumnDefinitions>
  22.                 <ColumnDefinition Width="40" />
  23.                 <ColumnDefinition />
  24.             </Grid.ColumnDefinitions>
  25.             <TextBlock Background="Red"
  26.                        Grid.Row="0"
  27.                        Grid.Column="0" />
  28.             <TextBlock Background="Blue"
  29.                        Grid.Row="0"
  30.                        Grid.Column="1" />
  31.             <TextBlock Background="Green"
  32.                        Grid.Row="1"
  33.                        Grid.ColumnSpan="2" />
  34.         </Grid>
  35.         
  36.         <StackPanel Grid.Row="0"
  37.                     Grid.Column="1">
  38.             <TextBlock Background="AliceBlue"
  39.                        HorizontalAlignment="Center"
  40.                        Width="100" />
  41.             <TextBlock Background="Aqua"
  42.                        HorizontalAlignment="Left"
  43.                        Width="100" />
  44.             <TextBlock Background="AliceBlue"
  45.                        HorizontalAlignment="Right"
  46.                        Width="100" />
  47.             <TextBlock Background="Aqua"
  48.                        HorizontalAlignment="Stretch"
  49.                        Width="200" />
  50.             <TextBlock Background="Red"
  51.                        VerticalAlignment="Stretch" />
  52.             <TextBlock Background="Aqua" />
  53.             <TextBlock Background="AliceBlue" />
  54.             <TextBlock Background="Aqua" />
  55.             <TextBlock Background="AliceBlue" />
  56.             <TextBlock Background="Aqua" />
  57.             <TextBlock Background="AliceBlue" />
  58.             <TextBlock Background="Yellow" />
  59.         </StackPanel>
  60.         
  61.         <Canvas Grid.Row="1"
  62.                 Grid.Column="0"
  63.                 Background="DarkGray">
  64.             <TextBlock Text="用户名:"
  65.                        Canvas.Left="85"
  66.                        Canvas.Top="31" />
  67.             <TextBlock Text="密码:"
  68.                        Canvas.Left="85"
  69.                        Canvas.Top="56"
  70.                        HorizontalAlignment="Center"
  71.                        VerticalAlignment="Top" />
  72.             <TextBox Canvas.Left="149"
  73.                      Canvas.Top="30"
  74.                      HorizontalAlignment="Left"
  75.                      VerticalAlignment="Center"
  76.                      Width="173" />
  77.             <TextBox Canvas.Left="149"
  78.                      Canvas.Top="56"
  79.                      HorizontalAlignment="Left"
  80.                      VerticalAlignment="Center"
  81.                      Width="173" />
  82.             <Button Content="确定"
  83.                     Canvas.Left="174"
  84.                     Canvas.Top="94"
  85.                     HorizontalAlignment="Left"
  86.                     VerticalAlignment="Center"
  87.                     Width="54" />
  88.             <Button Content="清除"
  89.                     Canvas.Left="260"
  90.                     Canvas.Top="94"
  91.                     HorizontalAlignment="Left"
  92.                     VerticalAlignment="Center"
  93.                     Width="54" />
  94.         </Canvas>
  95.         
  96.         <DockPanel Grid.Row="1"
  97.                    Grid.Column="1">
  98.             <TextBlock DockPanel.Dock="Top"
  99.                        Background="Orange" />
  100.             <TextBlock DockPanel.Dock="Left"
  101.                        Width="200"
  102.                        Background="Yellow" />
  103.             <TextBlock DockPanel.Dock="Right"
  104.                        Background="Red" />
  105.         </DockPanel>
  106.         
  107.         <WrapPanel Grid.Row="2"
  108.                    Grid.Column="0">
  109.             <TextBlock Background="Red"
  110.                        Width="300"
  111.                        HorizontalAlignment="Center" />
  112.             <TextBlock Background="Orange"
  113.                        Width="300"
  114.                        HorizontalAlignment="Right" />
  115.             <TextBlock Background="Yellow"
  116.                        Width="200" />
  117.             <TextBlock Background="Green"
  118.                        Width="200" />
  119.             <TextBlock Background="Red"
  120.                        Width="300" />
  121.             <TextBlock Background="Orange"
  122.                        Width="300" />
  123.             <TextBlock Background="Yellow"
  124.                        Width="200" />
  125.             <TextBlock Background="Green"
  126.                        Width="200" />
  127.         </WrapPanel>
  128.     </Grid>
复制代码
来源:https://www.cnblogs.com/swbna/archive/2023/05/26/17435780.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具