Wpf基础入门——容器Panel篇

这篇具有很好参考价值的文章主要介绍了Wpf基础入门——容器Panel篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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的三个属性:

  1. Orientation
  2. HorizontalAlignment
  3. 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会排列尽可能多的控件,排不下的控件将会新起一行或一列继续排列

代码演示

Wpf基础入门——容器Panel篇文章来源地址https://www.toymoban.com/news/detail-460222.html

    <!--Grid网格布局-->
    <Grid>
        <!--定义3行2列-->
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <!--为了方便演示,这里在第一个网格中重新定义Grid演示-->
        <Grid Grid.Row="0"
              Grid.Column="0">
            <!--这里面定义2行2列-->
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="2*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="40" />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <TextBlock Background="Red"
                       Grid.Row="0"
                       Grid.Column="0" />
            <TextBlock Background="Blue"
                       Grid.Row="0"
                       Grid.Column="1" />
            <TextBlock Background="Green"
                       Grid.Row="1"
                       Grid.ColumnSpan="2" />
        </Grid>

        <!--StackPanel演示-->
        <StackPanel Grid.Row="0"
                    Grid.Column="1">
            <TextBlock Background="AliceBlue"
                       HorizontalAlignment="Center"
                       Width="100" />
            <TextBlock Background="Aqua"
                       HorizontalAlignment="Left"
                       Width="100" />
            <TextBlock Background="AliceBlue"
                       HorizontalAlignment="Right"
                       Width="100" />
            <TextBlock Background="Aqua"
                       HorizontalAlignment="Stretch"
                       Width="200" />
            <TextBlock Background="Red"
                       VerticalAlignment="Stretch" />
            <TextBlock Background="Aqua" />
            <TextBlock Background="AliceBlue" />
            <TextBlock Background="Aqua" />
            <TextBlock Background="AliceBlue" />
            <TextBlock Background="Aqua" />
            <TextBlock Background="AliceBlue" />
            <TextBlock Background="Yellow" />
        </StackPanel>

        <!--Canvas布局演示-->
        <Canvas Grid.Row="1"
                Grid.Column="0"
                Background="DarkGray">
            <TextBlock Text="用户名:"
                       Canvas.Left="85"
                       Canvas.Top="31" />
            <TextBlock Text="密码:"
                       Canvas.Left="85"
                       Canvas.Top="56"
                       HorizontalAlignment="Center"
                       VerticalAlignment="Top" />
            <TextBox Canvas.Left="149"
                     Canvas.Top="30"
                     HorizontalAlignment="Left"
                     VerticalAlignment="Center"
                     Width="173" />
            <TextBox Canvas.Left="149"
                     Canvas.Top="56"
                     HorizontalAlignment="Left"
                     VerticalAlignment="Center"
                     Width="173" />
            <Button Content="确定"
                    Canvas.Left="174"
                    Canvas.Top="94"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Center"
                    Width="54" />
            <Button Content="清除"
                    Canvas.Left="260"
                    Canvas.Top="94"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Center"
                    Width="54" />
        </Canvas>

        <!--DockPanel演示-->
        <DockPanel Grid.Row="1"
                   Grid.Column="1">
            <TextBlock DockPanel.Dock="Top"
                       Background="Orange" />
            <TextBlock DockPanel.Dock="Left"
                       Width="200"
                       Background="Yellow" />
            <TextBlock DockPanel.Dock="Right"
                       Background="Red" />
        </DockPanel>

        <!--WarpPanel演示-->
        <WrapPanel Grid.Row="2"
                   Grid.Column="0">
            <TextBlock Background="Red"
                       Width="300"
                       HorizontalAlignment="Center" />
            <TextBlock Background="Orange"
                       Width="300"
                       HorizontalAlignment="Right" />
            <TextBlock Background="Yellow"
                       Width="200" />
            <TextBlock Background="Green"
                       Width="200" />
            <TextBlock Background="Red"
                       Width="300" />
            <TextBlock Background="Orange"
                       Width="300" />
            <TextBlock Background="Yellow"
                       Width="200" />
            <TextBlock Background="Green"
                       Width="200" />
        </WrapPanel>
    </Grid>

到了这里,关于Wpf基础入门——容器Panel篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 零基础学习CANoe Panel(2)—— 控件布局

    🍅 我是 蚂蚁小兵 ,专注于车载诊断领域,尤其擅长于对CANoe工具的使用 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】 🍅 零基础学习CANoe Panel设计目录汇总,点击跳转👉 🍅 这个系列是关于 CANoe Panel 设计的,本章节讲解, Panel 控件布局

    2023年04月23日
    浏览(83)
  • WPF 入门笔记 - 02 - 布局综合应用

    本篇博文对接上篇末尾处WPF常用布局控件的综合应用,为痕迹g布局控件介绍课后作业的一个思路方法。 首先来谈一谈布局原则: WPF 窗口只能包含一个元素(Window元素属于内容控件,内容控件只允许有一个子元素),所以我们得在窗口中放置一个容器,才能使我们的窗口放置更

    2024年02月06日
    浏览(48)
  • WPF_布局基础

    定义由列和行组成的灵活的网格区域。 行 列 背景 尺寸 自动适应:以所在行的元素最高尺寸为标准来定义行高。 绝对尺寸:给指定数值或者比例来定义行高。 跨行跨列:类似合并方格。 将子元素排列成水平或垂直的一行(默认:垂直)。 将子元素按从左到右的顺序定位,

    2024年02月10日
    浏览(43)
  • WPF自定义Panel:让拖拽变得更简单

       在 WPF 应用程序中,拖放操作是实现用户交互的重要组成部分。通过拖放操作,用户可以轻松地将数据从一个位置移动到另一个位置,或者将控件从一个容器移动到另一个容器。然而,WPF 中默认的拖放操作可能并不是那么好用。为了解决这个问题,我们可以自定义一个

    2024年03月27日
    浏览(38)
  • Layui快速入门之第二节布局容器(固定宽度与完整宽度)

    目录 一:固定宽度 二: 完整宽度              将栅格放入一个带有  class=\\\"layui-container\\\"  的特定容器中,以便在小屏幕以上的设备中固定宽度,让列可控(两侧有留白效果) 测试效果:            不固定容器宽度,将栅格或其它元素放入一个带有  class=\\\"layui-fluid\\\" 的容器中

    2024年02月09日
    浏览(54)
  • harmonyOS基础(三)- 快速弄懂HarmonyOS ArkTs基础组件、布局容器(前端视角篇)

    大家好!我是黑臂麒麟,一位6年的前端; 随着 鸿蒙4.0 的发布。鸿蒙社区不断壮大,且市场对 harmonyOS 应用认可度越来越高。很多公司开始对 鸿蒙应用开发 越来越重视。 之前想入坑鸿蒙,一直犹豫未下定决心学习。这次不再等待,开始系统学习起来。 此系列文章只做 harm

    2024年02月20日
    浏览(47)
  • WPF入门基础

    WPF (Windows Presentation Foundation) 英 /ˌpreznˈteɪʃn/ Presentationn. (颁奖等)仪式,典礼;授予,颁发;(在仪式上接受的)奖项,赠予物;展示会,介绍会,发布会;陈述,报告,说明;(事物的)呈现方式;(证件等的)出示;(证物的)提交,提供;(戏剧的)演出;(胎

    2024年02月06日
    浏览(38)
  • WPF 入门笔记 - 03 - 样式基础

    ? 程序的本质 - 数据结构 + 算法 ? ?本篇为学习李应保老师所著的《WPF专业编程指南》并搭配 WPF 开发圣经《WPF编程宝典第4版》以及痕迹大佬《WPF入门基础教程系列》文章所作笔记,对应《WPF专业编程指南》第 9 章之间内容,主要概述 WPF 中关于样式的相关内容,希望可以帮到

    2024年02月08日
    浏览(45)
  • WPF基础入门-Class5-WPF命令

    Class5-WPF命令 1、xaml编写一个button, Command 绑定一个命令 2、编写一个 model.cs 3、页面的cs文件绑定数据 点击页面按钮:

    2024年02月11日
    浏览(31)
  • WPF基础入门-Class4-WPF绑定

    Class4:WPF绑定 一、简单绑定数据 1、cs文件中设置需要绑定的数据: 2、编写xaml绑定 3、效果显示: 二、控件绑定 1、 Binding ElementName :绑定的元素 2、 Path=绑定的属性 3、 Mode :绑定的模式,default双向榜单TwoWay Mode绑定模式,onetime只改变一次 default默认双向 OneWay只能受到影响

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包