WPF五种布局

news2024/11/25 0:50:50

Grid

Grid为WPF中最常用的布局容器, 作为View中的主要组成部分, 负责框架中整体的页面布局。

标签

含义

ShowGridLines

可以设置行业的边距线的显示

Grid. RowDefinitions

可以创建任意行, 进行固定高度与百分比高度设置

Grid. ColumnDefinitions

可以创建任意列, 进行固定宽度与百分宽度设置

下图是三行三列

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
    </Grid>

第二 列宽度是其他两列的两倍

行的高度也类似

显示表格网线

ShowGridLines="True"

注意:

Grid的列宽与行高可采用固定、自动、按比例三种方式定义。

固定长度:值为一个确定的数字

自动长度:值为Auto,实际作用就是取实际控件所需的最小值

比例长度:*表示占用剩余的全部宽度;两行都是*,将平分剩余宽度;一个2*,一个*,则前者占剩余全部宽度的2/3,后者占1/3

不一定要设置宽和列,不给Grid设置列和宽,用自动的,反而效果更好,如下,用自动的,能将小图片放最右,如果定好宽列,反而效果不好,因为这样无法将文字放框中间,因为小图片会占位置

StackPanel

StackPanel将控件按照行或列来顺序排列,但不会换行。通过设置面板的Orientation属性设置了两种排列方式:横排(Horizontal默认的)和竖排(Vertical),默认为竖排(Vertical)。

属性

含义

Orientation

用于设置StackPanel的元素排列方式。默认以垂直的方式布局

Horizontal

水平布局, 设置水平效果

Vertical

垂直布局, 设置垂直效果

默认垂直排列

流式布局容器;默认是垂直方向,当控件比较多时,超出容器范围就不显示了

<StackPanel Orientation="Horizontal">
        <Button Width="200" Height="50" Content="button1"/>
        <Button Width="200" Height="50" Content="button2"/>
        <Button Width="200" Height="50" Content="button3"/>
        <Button Width="200" Height="50" Content="button4"/>
        <Button Width="200" Height="50" Content="button5"/>
        <Button Width="200" Height="50" Content="button6"/>
        <Button Width="200" Height="50" Content="button7"/>
        <Button Width="200" Height="50" Content="button8"/>
        <Button Width="200" Height="50" Content="button9"/>
        <Button Width="200" Height="50" Content="button10"/>
    </StackPanel>

改方向

Orientation="Horizontal"

注意:

Orientation="Horizontal"时,设置FlowDirection属性为RightToLeft,则元素将从右向左排列。

WrapPanel

跟StackPanel类似,但超出容器范围会自动换行

Orientation="Horizontal"时各控件从左至右罗列,

Orientation="Vertical"时各控件从上至下罗列,

默认水平排列

<WrapPanel Orientation="Vertical">
        <Button Width="200" Height="50" Content="button1"/>
        <Button Width="200" Height="50" Content="button2"/>
        <Button Width="200" Height="50" Content="button3"/>
        <Button Width="200" Height="50" Content="button4"/>
        <Button Width="200" Height="50" Content="button5"/>
        <Button Width="200" Height="50" Content="button6"/>
        <Button Width="200" Height="50" Content="button7"/>
        <Button Width="200" Height="50" Content="button8"/>
        <Button Width="200" Height="50" Content="button9"/>
        <Button Width="200" Height="50" Content="button10"/>
    </WrapPanel>

改方向

Orientation="Horizontal"

DockPanel

绑定到容器边缘

默认最后一个按钮填充整个容器

bbb是最后一个控件,填充了容器剩余的部分

最后一个按钮不填充整个容器

<DockPanel LastChildFill="False">

bbb是最后一个控件,没有填充容器剩余的部分

<DockPanel LastChildFill="False">
        <Button Content="top" DockPanel.Dock="Top"></Button>
        <Button Content="botton" DockPanel.Dock="Bottom"></Button>
        <Button Content="left" DockPanel.Dock="Left"></Button>
        <Button Content="right" DockPanel.Dock="Right"></Button>
        <Button Content="aaa" ></Button>
        <Button Content="bbb" ></Button>
    </DockPanel>

DockPanel

画布,

默认是会重叠覆盖

距画布左边和顶部的一个距离100

Canvas.Left="100" Canvas.Top="100"

<Canvas>
        <Button Width="200" Height="50" Content="111" Canvas.Left="100" Canvas.Top="100"></Button>
        <Button Width="200" Height="50" Content="222" Canvas.Left="200" Canvas.Top="150"></Button>

        <Button Width="200" Height="50" Content="333" Canvas.Left="300" Canvas.Top="200"></Button>
        <Button Width="200" Height="50" Content="444" Canvas.Left="400" Canvas.Top="250"></Button>
    </Canvas>

Border

Border 是一个装饰的控件,此控件用于绘制边框及背景,在Border中只能有一个子控件,若要显示多个子控件,需要将一个附加的Panel控件放置在父Border中。然后可以将子控件放置在该 Panel控件中。

属性

含义

Background

背景色

BorderBrush

边框色

BorderThickness

边框宽度

CornerRadius

各个角,圆的半径

ScrollViewer

ScrollViewer是带有滚动条的面板。在ScrollViewer中只能有一个子控件,若要显示多个子控件,需要将一个附加的 Panel控件放置在父 ScrollViewer中。然后可以将子控件放置在该控件中。

属性

含义

HorizontalScrollBarVisibility

水平滚动条是否显示默认为Hidden

VerticalScrollBarVisibility

垂直滚动条是否显示 默认为Visible

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Button Content="Button" Width="800" Height="800"></Button>
    </ScrollViewer>

注意:

一般我们都会设置 HorizontalScrollBarVisibility=“Auto” VerticalScrollBarVisibility=“Auto”,意思是:当内容超出可视范围时,才显示横向/纵向滚动条。

ViewBox

Viewbox的作用是拉伸或延展位于其中的组件,以填满可用空间。在Viewbox中只能有一个子控件,若要显示多个子控件,需要将一个附加的Panel控件放置在父Viewbox中。然后可以将子控件放置在该控件中

常用属性:Stretch:获取或设置拉伸模式以决定该组件中的内容以怎样的形式填充该组件的已有空间,Stretch默认值为Uniform。

属性值 含义

None 不进行拉伸,按子元素设置的长宽显示

Uniform 按原比例缩放子元素,使得一边不足,另一边恰好填充

Fill 缩放子元素,使得子元素的长变为Viewbox的长,宽变为Viewbox的宽

UniformToFill 按原比例缩放子元素,使得子元素一边恰好填充,另一边超出Viewbox的区域

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition>
            </RowDefinition>
            <RowDefinition>
            </RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition>
            </ColumnDefinition>
            <ColumnDefinition>
            </ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Viewbox Grid.Row="0" Grid.Column="0" Stretch="None">
            <Button Width="100" Height="50" Content="None"></Button>
        </Viewbox>
        <Viewbox Grid.Row="0" Grid.Column="1" Stretch="Uniform">
            <Button Width="100" Height="50" Content="Uniform"></Button>
        </Viewbox>
        <Viewbox Grid.Row="1" Grid.Column="0" Stretch="Fill">
            <Button Width="100" Height="50" Content="Fill"></Button>
        </Viewbox>
        <Viewbox Grid.Row="1" Grid.Column="1" Stretch="UniformToFill">
            <Button Width="100" Height="50" Content="UniformToFill"></Button>
        </Viewbox>
    </Grid>

共性

ViewBox ScrollViewer Border 只能有一个子控件,若要显示多个子控件,需要将一个附加的Panel控件放置在父Viewbox中。然后可以将子控件放置在该控件中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二氧化碳地质封存技术应用前景及模型构建实践方法与讨论

2022年七月七日&#xff0c;工业和信息化部、发展改革委、生态环境部关于印发工业领域碳达峰实施方案的通知落地。全国各省份积极响应&#xff0c;纷纷出台地方指导文件&#xff0c;标志着我国碳减排事业的全面铺开。二氧化碳地质封存技术作为实现我国“双碳”目标的重要一环&a…

量化策略——准备4 python量化因子测算绘图

文章目录因子测算框架1. 预处理股票数据2. 指标测算3. 测算结果整理4. 结果绘图量化因子的测算通常都是模拟交易&#xff0c;计算各种指标&#xff0c;其中&#xff1a;测算需要用到的第三方库&#xff1a;numpy&#xff0c;pandas&#xff0c;talib绘图需要用到的第三方库&…

研报精选230223

目录 【行业230223开源证券】计算机&#xff1a;政策节奏超预期&#xff0c;数据要素市场加速发展【个股230223光大证券_鲁商发展】投资价值分析报告&#xff1a;剥离地产业务、战略转型大健康产业&#xff0c;化妆品“国货之光”待发力【个股230223华安证券_国际医学】综合医疗…

数据库恢复技术

一&#xff0c;事务的基本概念 1.事务 事物是用户定义的一个数据库操作序列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的工作单位。 事物和程序是两个概念。一般的讲&#xff0c;一个程序中包含多个事物。 事物的开始与结束可以由用户…

瓴羊Quick BI智能报表,轻松搞定复杂“中国式报表”

随着企业的不断成长&#xff0c;内部管理、运营所需的报表往往越做越复杂。不管是对一个职场新人&#xff0c;还是专业的数据分析人员来说&#xff0c;制作复杂的“中国式报表”都是一件让人很痛苦的事。正因如此&#xff0c;越来越多的企业开始使用瓴羊Quick BI智能报表&#…

FPGA纯verilog代码实现H.264/AVC视频解码,提供工程源码和技术支持

目录1、前言2、硬件H.264/AVC视频解码优势3、vivado工程设计架构4、代码架构分析5、vivado仿真6、福利&#xff1a;工程代码的获取1、前言 本设计是一种verilog代码实现的低功耗H.264/AVC解码器(baseline )&#xff0c;硬件ASIC设计&#xff0c;不使用任何GPP/DSP等内核&#…

最新Python异步编程详解

我们都知道对于I/O相关的程序来说&#xff0c;异步编程可以大幅度的提高系统的吞吐量&#xff0c;因为在某个I/O操作的读写过程中&#xff0c;系统可以先去处理其它的操作&#xff08;通常是其它的I/O操作&#xff09;&#xff0c;那么Python中是如何实现异步编程的呢&#xff…

Python每日一练(20230223)

目录 1. 合并区间 2. 单词接龙 3. N皇后 附录&#xff1a;回溯算法 基本思想 一般步骤 1. 合并区间 难度&#xff1a;★★ 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回…

【虚拟仿真】Unity3D中实现鼠标的单击、双击、拖动的不同状态判断

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 这篇文章分享一下虚拟仿真项目中经常碰到鼠标事件控制代码。 …

某直聘tp_token解析

尊重版权&#xff0c;请勿盗版&#xff0c;不放代码。截至2023-02-23更新---------------------------------------检测windows属性总数大于150 改成大于15 > 150检测了document属性大于50检测了navigate属性检测了navigate.plugins 属性值检测moudle nodejs是否存在&#x…

Java 异常处理,超详细整理,适合新手入门

目录 前言 抛出异常 捕获异常 处理异常 finally块 总结 前言 当Java程序中出现错误或异常时&#xff0c;通常会抛出一个异常。Java的异常处理机制使得我们可以在程序运行过程中捕获这些异常并采取相应的措施&#xff0c;以便程序能够正常运行或者优雅地停止。 抛出异常 在…

德馨食品再战IPO,“卖水人“还有新故事吗?

新茶饮供应链企业迎来上市潮。2月13日&#xff0c;浙江德馨食品科技股份有限公司&#xff08;下称“德馨食品”&#xff09;更新招股书&#xff0c;再次冲刺深交所。此前&#xff0c;原料果汁速冻果块制造商田野创新股份有限公司&#xff08;下称“田野股份”&#xff0c;83202…

华为OD机试真题 用 C++ 实现 - 字符串加密 | 多看题,提高通过率

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

16行代码采集原神官网角色全图+全语音

嗨害大家好鸭&#xff01;我是小熊猫~ 本来是不玩原神的&#xff0c; 但是实在是经不住诱惑鸭~ 毕竟谁能拒绝可以爬树、炸鱼、壶里造房子、抓小动物、躲猫猫的对战游戏捏~ 准备工具 源码资料电子书:点击此处跳转文末名片获取 准备模块 import requests import re import ex…

安卓开发 AlertDialog mesaage太长显示不全 下面按钮不显示 bug解决

简单解决 去掉下面这行即可 <item name"android:windowTranslucentStatus">true</item>但是状态栏不够沉浸&#xff0c;只定义dialog的style &#xff08;推荐&#xff01;&#xff09; <style name"MyDialog" parent"ThemeOverlay.…

Blender 导出fbx模型到 untiy

文章目录导出模型的基本设置将导出的模型放到Untiy里材质问题导出模型的基本设置 导出模型前先 ctrla 应用全部变换&#xff0c;模型原点应该根据需要放在物体中心或底部 1 路径模式&#xff1a;复制 &#xff0c;这会把模型引用的纹理复制一份到选定的文件夹下&#xff0c;用…

华为OD机试真题 用 C++ 实现 - 括号检查

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

Homekit智能家居DIY一智能触摸面板开关

触摸开关&#xff0c;即通过触摸方式控制的墙壁开关&#xff0c;其感官场景如同我们的触屏手机&#xff0c;只需手指轻轻一点即可达到控制电器的目的&#xff0c;随着人们生活品质的提高&#xff0c;触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

模电学习7. 三极管特性曲线与静态工作点

模电学习7. 三极管特性曲线与静态工作点一、三极管的伏安特性曲线1. 三极管的伏安特性曲线2. 三极管的静态工作点二、合适的静态工作点选择1. 合适静态工作点条件2. 静态工作点的确定三、使用立创EDA仿真查看静态工作点1. 搭建如下图所示测试电路2. 点击菜单仿真、仿真设置3. 运…

图遍历详解

图遍历 在 Neo4j 中&#xff0c;关系的唯一性始终得到遵守。即两个节点之间永远不会有两个相同类型和方向的关系。这使 Neo4j 能够避免图形遍历中的循环或无限循环。使用多个 Match 子句和多个模式的查询性能分析 PROFILE 加入PROFILE的查询语句将占用更多的资源&#xff0c;所…