zoukankan      html  css  js  c++  java
  • WPF 入门笔记之布局

    一、布局原则:

    1. 不应显示的设定元素的尺寸,反而元素可以改变它的尺寸,并适应它们的内容

    2. 不应使用平布的坐标,指定元素的位置。

    3. 布局容器和它的子元素是共享可以使用的空间

    4. 可以嵌套的使用布局容器

    二、布局容器

    2.1 StackPanel:堆栈面板

     堆栈面板的Orientation="Vertical"属性和子元素HorizontalAlignment属性一起使用,反之Orientation="Vertical"属性和子元素HorizontalAlignment一起使用

    前者Orientation="Vertical"垂直排列,后者Orientation="Horizontal"水平排列

    <Window x:Class="Haos.WPF.Case.Layout.StackPanelWindow"
            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:Haos.WPF.Case.Layout"
            mc:Ignorable="d"
            Title="堆栈面板" Height="120" Width="300">
        <!--Orientation="Horizontal"-->
        <StackPanel Height="auto" Orientation="Vertical">
            <Button Content="button" Name="btn_1" HorizontalAlignment="Left"></Button>
            <Button Content="button" Name="btn_2" HorizontalAlignment="Center"></Button>
            <Button Content="button" Name="btn_3" HorizontalAlignment="Right"></Button>
            <Button Content="button" Name="btn_4" HorizontalAlignment="Stretch"></Button>
        </StackPanel>
    </Window>

    2.2 WrapPanel:一行或一列进行排列

     

    前者Orientation="Horizontal"水平排列,后者Orientation="Vertical"垂直排列.

    <Window x:Class="Haos.WPF.Case.Layout.WrapPanelWindow"
            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:Haos.WPF.Case.Layout"
            mc:Ignorable="d"
            Title="WrapPanel" Height="300" Width="300">
        <!--Orientation="Vertical"-->
        <WrapPanel Orientation="Horizontal">
            <!--HorizontalAlignment="Left"-->
            <Button Content="button" Name="btn_1" VerticalAlignment="Top"></Button>
            <Button Content="button" Height="100" Name="btn_2" VerticalAlignment="Center"></Button>
            <Button Content="button" Name="btn_3" VerticalAlignment="Stretch"></Button>
            <Button Content="button" Name="btn_4" VerticalAlignment="Bottom"></Button>
        </WrapPanel>
    </Window>

    2.3 DockPanel:顺着外边缘来拉伸所包含的控件

     LastChildFill = "True"表示最后一个子元素是否填充满剩余区域

    <Window x:Class="Haos.WPF.Case.Layout.DockPanelWindow"
            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:Haos.WPF.Case.Layout"
            mc:Ignorable="d"
            Title="DockPanel" Height="200" Width="300">
        <DockPanel LastChildFill="True">
            <Button Content="button" Name="btn_1" DockPanel.Dock="Left"></Button>
            <Button Content="button" Name="btn_2" DockPanel.Dock="Top"></Button>
            <Button Content="button" Name="btn_3" DockPanel.Dock="Right"></Button>
            <Button Content="button" Name="btn_4" DockPanel.Dock="Bottom"></Button>
            <Button Content="button" Name="btn_5"></Button>
        </DockPanel>
    </Window>

    2.4 Grid:网格布局(WPF中功能最强大的布局容器)

    2.4.1 Grid 的使用

    ShowGridLines="True" 开启Grid的分格线

    Grid.Row="0" 设置子元素在那一行

    Grid.Column="4" 设置子元素在那一列

    Grid.RowSpan="2" 设置子元素占用几行

    Grid.ColumnSpan="2" 设置子元素占用几列

    UseLayoutRounding="True 布局舍入,当在网络放入一个图片,如果不是一个整数像素的宽度,图形边缘会变的模糊。开启布局舍入可以解决这个问题

    SharedSizeGroup:共享尺寸组

    <Window x:Class="Haos.WPF.Case.Layout.GridPanelWindow"
            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:Haos.WPF.Case.Layout"
            mc:Ignorable="d"
            Title="Grid" Height="300" Width="300">
        <!--ShowGridLines="True" 开启Grid的分格线-->
        <!--UseLayoutRounding="True 布局舍入-->
        <Grid ShowGridLines="True" UseLayoutRounding="True">
            <!--分行-->
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
    
            </Grid.RowDefinitions>
            <!--分列-->
            <Grid.ColumnDefinitions>
                <!--设置列宽的方法-->
                <ColumnDefinition Width="50"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <ColumnDefinition Width="2*"></ColumnDefinition>
                <ColumnDefinition Width="3*"></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <!--把子元素这只指定网格中 Grid.Row="0" Grid.Column="0"-->
            <Button Content="btn_1" Name="btn_1" Grid.Row="0" Grid.Column="0"></Button>
            <Button Content="btn_2" Name="btn_2" Grid.Row="3" Grid.Column="6"></Button>
            <!--设置子元素占用多个网络  Grid.Column="4" Grid.ColumnSpan="2"-->
            <Button Content="btn_3" Name="btn_3" Grid.Row="0" Grid.Column="4" Grid.ColumnSpan="2"></Button>
            <Button Content="btn_4" Name="btn_4" Grid.Row="1" Grid.Column="1" Grid.RowSpan="2"></Button>
            <Button Content="btn_5" Name="btn_5" Grid.Row="2" Grid.Column="3" Grid.RowSpan="2" Grid.ColumnSpan="2"></Button>
    
        </Grid>
    </Window>

    2.4.2 GridSplitter:分割线

    <Window x:Class="Haos.WPF.Case.Layout.GridSplitterWindow"
            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:Haos.WPF.Case.Layout"
            mc:Ignorable="d"
            Title="GridSplitterWindow" Height="150" Width="300">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="auto"></ColumnDefinition>
                <ColumnDefinition Width="auto"></ColumnDefinition>
                <ColumnDefinition Width="auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Label Content="this is lable" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Grid.Column="0"></Label>
            <Label Content="this is lable column 2" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Grid.Column="2"></Label>
            <GridSplitter Grid.Column="1" Width="2"></GridSplitter>
        </Grid>
    </Window>

    2.5 布局控件常和Border控件一起使用

      a.Background:背景色

      b.BorderBrush:前景色(边框颜色)

      c.BorderThickness:边框大小

      d.CornerRadius:圆角角度

    <Border Background="AliceBlue" BorderBrush="Red" BorderThickness="1" CornerRadius="25" Padding="5">
            <StackPanel Height="auto" Orientation="Vertical">
                <!--VerticalAlignment="Center"-->
                <Button Content="button" Name="btn_2" HorizontalAlignment="Center"></Button>
                <Button Content="button" Name="btn_1" HorizontalAlignment="Left"></Button>
                <Button Content="button" Name="btn_3" HorizontalAlignment="Right"></Button>
                <Button Content="button" Name="btn_4" HorizontalAlignment="Stretch"></Button>
            </StackPanel>
    </Border>

    2.6 共有常用属性

    Margin:0,0,0,0 外边距分别(左,上,右,下)

    Padding:0,0,0,0 内边距分别(左,上,右,下)

    子元素->HorizontalAlignment:父布局容器垂直排列时,子元素位置

    子元素->VerticalAlignment:父布局容器水平排列时,子元素位置

  • 相关阅读:
    腾讯云CentOS7学习
    听力词汇发音练习软件
    中缀表达式转后缀表达式
    两个升序序列的中位数
    CentOS配置静态IP
    一种简单的基于图像或激光雷达的道路(赛道)识别程序
    Win10+VS2019 配置YOLOv3
    【算法题】CCF CSP第二题练习(更新中)
    rpm的使用
    SCL
  • 原文地址:https://www.cnblogs.com/haosit/p/8951626.html
Copyright © 2011-2022 走看看