美文网首页
WPF Grid Layout

WPF Grid Layout

作者: 满脸胡渣的年轻大叔 | 来源:发表于2023-10-26 18:16 被阅读0次

    先来一张网格布局的图(照着BILIBILI 某个视频敲的)


    image.png

    Grid

    网格布局,从上图我们可以看,一般可以用来划分大块的区域

    行定义 Grid.RowDefinitions

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="100"/>
                <RowDefinition />
    
            </Grid.RowDefinitions>
    </Grid>
    

    这是一个占位两行网格,第一格高度为 100(这里一般指的是相素PX)

    Height属性

    • 默认不设值的时候,会按行数平均分
    • Auto 自动,会根据内容自动计算需要的高度
    • 0.8* 按比例分配(第一个默认的情况,其实就是都是 1*)

    列定义 Grid.ColumnDefinitions

    <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="200" />
                  <ColumnDefinition />
            </Grid.ColumnDefinitions>
    </Grid>
    

    两列的网格布局实现,第一列的宽度为200
    Width属性同上Height

    网格划分

    真实的空间,不单单只划分列或者行,还可以两者组合

    <Grid>
    
                  <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
    
                    <Grid.RowDefinitions>
                        <RowDefinition Height="0.8*"/>
                        <RowDefinition/>
                        <RowDefinition />
                    </Grid.RowDefinitions>
    
    <!-- 此外添加网格里的内容填充-->
    
      </Grid>
    
    上面代码的布局

    网格内容关联及合并单元格

    指定关联单元格

    • 指定第几列 Grid.Column
    • 指定第几行 Grid.Row
      比如,我们如何将第一行,第二个单元格背景改为蓝色
    <!-- 指定 填充的颜色为 Grid.Column="1"( 第二列),行为默认0(第1行 Grid.Row="0")-->
    <Border Background="#0396FF" Margin="10" Grid.Column="1"/>
    

    小插曲(以下内容是错误的,这里展示自己的一个思维过程 ):
    一开始以为某一列的内容,直接在当前ColumnDefinition 的标签里填充,类型于HTML 元素,一层包一层

    <ColumnDefinition >
        <Button>
    </ColumnDefinition >
    

    这样不就可以不用另外指定了。

    BUT! Too young,too simple,sometimes naive

    正常我们一般写GUI都是这样,但我们现在是网格,网格定位必须有行有列,上面的写法只能单独指定行里的内容或者列里的内容

    合并单元格

    • 列合并 Grid.ColumnSpan
    • 行合并 Grid.RowSpan
    <Border Background="#623AA2" Grid.Row="1" Grid.ColumnSpan="3" Margin="10"/>
    

    综合例子

    顶图的例子代码如下

    <Window x:Class="WPFGridLayout.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WPFGridLayout"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
    <!-- 最外层Grid -->
        <Grid>
    
          <!-- 分为二行-->
            <Grid.RowDefinitions>
                <RowDefinition Height="100"/>
                <RowDefinition />
            </Grid.RowDefinitions>
          <!-- 设置第一行背景 -->
            <Border Background="#28C76F"/>
    
          <!--将第二行分为两列 -->
            <Grid Grid.Row="1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="200" />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
    
                <Border Background="#92FFC0" Grid.Column="0" Margin="0,10,10,10"/>
    
                <!--将第二列 再 用 Grid划分 -->
                <Grid Grid.Column="1">
                    <!-- 分为 5 列 -->
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <!-- 分为3行 -->
                    <Grid.RowDefinitions>
                        <RowDefinition Height="0.8*"/>
                        <RowDefinition/>
                        <RowDefinition />
                    </Grid.RowDefinitions>
    
                    <!-- 设置第一行5列的背景 -->
                    <Border Background="#F8D800" Margin="10"/>
                    <Border Background="#0396FF" Margin="10" Grid.Column="1"/>
                    <Border Background="#EA5455" Margin="10" Grid.Column="2"/>
                    <Border Background="#7367F0" Margin="10" Grid.Column="3"/>
                    <Border Background="#32CCBC" Margin="10" Grid.Column="4"/>
    
                    <!-- 将第二行(ROW=1),第0列开始的三列合并为一个背景 -->
                    <Border Background="#623AA2" Grid.Row="1" Grid.ColumnSpan="3" Margin="10"/>
                    <!-- 将第二行(ROW=1),第3列开始的两列合并为一个背景 -->
                    <Border Background="#F55555" Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="3" Margin="10"/>
                    
                    
                    <Border Background="#52E5E7" Grid.Row="2" Grid.ColumnSpan="3" Margin="10"/>
                    <Border Background="#79F1A4" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="3" Margin="10"/>
                </Grid>
            </Grid>
        </Grid>
    </Window>
    
    

    我们可以发现,我们的标签最后有 三层 </Grid>,所以Grid 是可以无限套娃(嵌套,一层套一层)。
    另:
    Border
    貌似是个装饰产物,可以用以设置控件的背景,目前还不是很了解

    相关文章

      网友评论

          本文标题:WPF Grid Layout

          本文链接:https://www.haomeiwen.com/subject/enoyidtx.html