WPF_常用的五种布局方式

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:Visual Studio 2015 * SQL Server

作者:叶

撰写时间:2019年01月01日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

  • Grid 网格布局:

       使用网格布局可以自定义行和列通过行列的数量、行高列宽来调整控件的布局。

Grid的特点:可以定义任何数量的行和列,还可以设置自己纵向跨几行,横向跨几列。

每个窗体只有一个顶级元素和一个子元素,<Grid></grid>

   Grid有可以使用:

绝对值(固定宽高):

代码如下:

<Grid>

    <Grid.RowDefinions>

       <RowDefinions  Height=”200”/>

       <RowDefinion  Height=”250”/>

</Grid.RowDefinions>

<Grid.ColumnDefinitions>

   <ColumnDefinition  Width=”250”/>

   <ColumnDefinition  Width=”95”/>

</Grid.ColumnDefinitions>

........

</Grid>

相对比例:

     代码如下:

        <Grid>

    <Grid.RowDefinions>

       <RowDefinion  Height=”*”/>

       <RowDefinion  Height=”Auto”/>

</Grid.RowDefinions>

<Grid.ColumnDefinitions>

   <ColumnDefinition  Width=”*”/>

   <ColumnDefinition  Width=”Auto”/>

</Grid.ColumnDefinitions>

........

</Grid>

自动调整:

相对于绝对值,相对比例宽度、高度会随着内容大小而改变。

定义好几行、几列和宽高,就开始往Grid布局中插入所需要的控件,如:

                   WPF_常用的五种布局方式

 

  • StackPanel 栈面板:

将控件按照行或列顺序排序,但不会换行。通过设置Orientation属性设置了两种排序方式: 横排(Horizontal 默认的)和竖排(Vertical)。横向和纵向的StackPanel默认每个元素宽度与面板一样宽,超出则会截断多出的内容。剩下的将由HorizontalAlignmentVerticalAlignment属性来决定如何分配。

 

 <StackPanel Orientation="Vertical" VerticalAlignment="Stretch">

        <GroupBox Header="网站分类" Height="auto">

            <StackPanel Orientation="Vertical">

                <Button Content=".NET技术(16)">

                    <Button.Background>

                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

                            <GradientStop Color="#FFEAD765" Offset="0"/>

                            <GradientStop Color="#FFF1F1EF" Offset="1"/>

                        </LinearGradientBrush>

                    </Button.Background>

                </Button>

                <Button Content="编程语言(13)">

                    <Button.Background>

                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

                            <GradientStop Color="#FFF06D5D" Offset="0"/>

                            <GradientStop Color="White" Offset="1"/>

                        </LinearGradientBrush>

                    </Button.Background>

                </Button>

                <Button Content="软件设计(3)">

                    <Button.Background>

                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

                            <GradientStop Color="#FF4CD057" Offset="0"/>

                            <GradientStop Color="White" Offset="1"/>

                        </LinearGradientBrush>

                    </Button.Background>

                </Button>

                <Button Content="Web前端(16)">

                    <Button.Background>

                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

                            <GradientStop Color="#FF6DC8C0" Offset="0"/>

                            <GradientStop Color="White" Offset="1"/>

                        </LinearGradientBrush>

                    </Button.Background>

                </Button>

            </StackPanel>

        </GroupBox>

  </StackPanel>

      WPF_常用的五种布局方式          WPF_常用的五种布局方式                   

 

 

  • WrapPanel 环绕面板:

     WrapPanel布局面板将各个空间从左至右按照行或列的顺序罗列,当长度或高度不够时会自动调整进行换行,后续排序按照从上至下或从左至右的顺序进行。通过Orientation—根据内容自动换行。设置为Horizontal:元素是从左至右排序的。设置为Vertical:元素是从上至下排序的。

     <WrapPanel Margin="3">

        <Button VerticalAlignment="Top">顶层按钮</Button>

        <Button MinHeight="60" Width="200">较高的按钮</Button>

        <Button VerticalAlignment="Bottom">底部按钮</Button>

        <Button  Width="200">拉伸按钮</Button>

        <Button VerticalAlignment="Center">居中按钮</Button>

        <Button MinHeight="60" Width="200">居中按钮</Button>

        <Button VerticalAlignment="Center">居中按钮</Button>

        <Button MinHeight="60" Width="200">剧中按钮</Button>

    </WrapPanel>

               WPF_常用的五种布局方式

 

  • Canvas 画布

       Canvas布局是最基本的面板,主要用途是用来画图。它只是一个存储控件的容器,内部元素可以使用以像素为单位的绝对坐标进行定位,也允许指定相对任何角的坐标,通过设置其附加属性,附加属性的值是作为外边距使用。如果一个控件没有使用任何附加属性它会被放在Canvas的左上方(等同于设置Left和Top为0)。

<Grid ShowGridLines="True">

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="254*"/>

        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>

            <RowDefinition Height="129*"/>

        </Grid.RowDefinitions>

        <Canvas Margin="0,0,-0.4,0.4" Grid.RowSpan="3" Grid.ColumnSpan="2">

            <Canvas.Background>

                <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">

                    <GradientStop Color="#FF4EB1BA" Offset="0.296"/>

                    <GradientStop Color="#FFEAECED" Offset="0.764"/>

                </LinearGradientBrush>

            </Canvas.Background>

            <Canvas>

                <TextBlock Canvas.Left="80" Height="100" Width="200" Canvas.Top="30" FontSize="20">

                    <TextBlock.Background>

                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

                            <GradientStop Color="#FF51C85B" Offset="0"/>

                            <GradientStop Color="White" Offset="1"/>

                        </LinearGradientBrush>

                    </TextBlock.Background><Run Text="01"/>

                </TextBlock>

               

                <TextBlock Canvas.Left="80" Height="100" Width="200" Canvas.Bottom="-250" FontSize="20">

                    <TextBlock.Background>

                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

                            <GradientStop Color="#FF51C85B" Offset="0"/>

                            <GradientStop Color="White" Offset="1"/>

                        </LinearGradientBrush>

                    </TextBlock.Background><Run Text="02"/>

                </TextBlock>

            </Canvas>

        </Canvas>

        <DockPanel LastChildFill="False" Margin="0,0,-0.4,0.4" Grid.RowSpan="3" Grid.ColumnSpan="2">

            <TextBlock FontSize="28" DockPanel.Dock="Left">0</TextBlock>

        </DockPanel>   

 </Grid>

                             WPF_常用的五种布局方式

 

五、DockPanel 泊靠式面板

        内部元素可以选择泊靠的方向(上下左右中),DockPanel会对每个子元素进行排序,并停靠在面板的一侧,多个停靠在同一侧的元素按顺序排序。


          <Grid>

        <!--定义两列-->

        <Grid.ColumnDefinitions>

            <ColumnDefinition/>

            <ColumnDefinition/>

        </Grid.ColumnDefinitions>

        <!--DockPanel 布局-->

        <DockPanel LastChildFill="False">

            <Button DockPanel.Dock="Top">

                <StackPanel>

                    <TextBlock>停靠在顶部</TextBlock>

                </StackPanel>

            </Button>

            <Button DockPanel.Dock="Left">1111</Button>

            <Button DockPanel.Dock="Bottom">停靠在底部</Button>

            <Button DockPanel.Dock="Right"> 右侧停靠</Button>

            <Button DockPanel.Dock="Top">剩下的空间</Button>

        </DockPanel>

        <DockPanel Grid.Column="1" LastChildFill="True">

            <Button DockPanel.Dock="Top">顶部按钮</Button>

            <Button DockPanel.Dock="Top" HorizontalAlignment="Center">1111</Button>

            <Button DockPanel.Dock="Top" HorizontalAlignment="Right">右对齐的顶部按钮</Button>

            <Button DockPanel.Dock="Bottom">底部按钮</Button>

            <Button DockPanel.Dock="Left">左侧按钮</Button>

            <Button DockPanel.Dock="Right">右侧按钮</Button>

            <Button>剩余空间</Button>

        </DockPanel>

    </Grid>

   使用Grid布局,先定义好两列,再使用DockPanel布局,将LastChildFill属性设置为true(默认设置),那么无论DockPanel的最后一个子元素设置的其他任何停靠值,钙元素都将始终填满剩余的空间,如果设置为false,则其相反。

                                  WPF_常用的五种布局方式

 

 

 

 

 

 

 

 

相关文章:

  • 2021-12-21
  • 2021-10-24
  • 2022-12-23
  • 2022-02-09
  • 2021-11-29
  • 2022-12-23
  • 2021-11-29
  • 2022-01-27
猜你喜欢
  • 2022-01-15
  • 2022-02-09
  • 2022-01-17
  • 2021-10-30
  • 2022-01-01
  • 2022-02-09
相关资源
相似解决方案