WPF的UI布局

WPF 的 UI 布局

XAML的优点

  1. ui和动画更专业-好用

  2. 简单易懂,结构清晰-易学

  3. 使设计师直接参与软件开发,随时沟通无需二次转化-高效

  4. 真正实现了UI和逻辑的剥离(ui集中在ui层、逻辑代码集中在程序逻辑层,形成高内聚低耦合的结构)

XAML是一种“声明”式语言,当你见到一个标签,就意味着声明了一个对象,对象之间的层级关系要么是并列、要么是包含,全都体现在标签的关系上。

非空标签:<Tag Attribute1=Value1 Attribute2=Value2>Content</Tag>空标签:<Tag Attribute1=Value1 Attribute2=Value2/>

【1 】布局的原则 第一、如果做屏幕适应的程序,不要显示的设置元素(控件)的尺寸,一般可以设置最小和最大尺寸。 第二、不应使用屏幕坐标指定元素位置,元素的位置应该由它所在的容器决定。 第三、布局容器可以嵌套。 【2 】布局的容器

Canvas 定义一个区域,在此区域内,您可以使用相对于 Canvas 区域的坐标显式定位子元素。

DockPanel 定义一个区域,在此区域中,您可以使子元素互相水平或垂直排列。

Grid 定义由行和列组成的灵活网格区域。

StackPanel 将子元素排列成一行(可沿水平或垂直方向)。

VirtualizingPanel 为“虚拟化”其子数据集合的 Panel 元素提供一个框架。这是一个抽象类。

WrapPanel 从左至右按顺序位置定位子元素,在包含框的边缘处将内容断开至下一行。后续排序按照从上至下或从右至左的顺序进行,具体取决于 Orientation 属性的值。 对于其所需应用程序布局不可能使用任意预定义的 Panel 元素来实现的方案,您可以通过从 Panel 继承、并重写 MeasureOverride 和 ArrangeOverride 方法来实现自定义布局行为。

uniformGrid

可以均分有限的空间

Grid 面板 (可以想象成 一个 table)树形结构

【1 】 布局特点 第一、可以定义任意数量的行、列,并且轻松跨行、跨列。 第二、行、列高度或者宽度可以设置绝对值、相对比例、自动调整等方式。 【2 】适用场合 第一、UI 的大布局设计。 第二、UI 需要整体尺寸改变时。

StackPanel 面板 树形结构

【1 】布局特点 第一、可以把内部元素在纵向或者横向上紧凑排列,形成栈式布局,通俗来说就是把元素堆到一块。 第二、当把前面的元素去掉后,后面的会整体向前移动,占领原有元素空间。 【2 】适用场合 第一、同类型原型需要紧凑排列(比如制作菜单或者列表) 第二、移除其中的元素后能够自动补缺的布局,或者动画。

【3 】三个属性 第一、Orientaion 属性:决定内部元素是横向还是纵向积累。 第二、HorizontalAlignment 属性:决定内部元素水平方上的对齐方式。 第三、VerticalAlignment 属性:决定内部元素垂直方向上的对齐方式。

CanvasCanvas面板(译文:画布)

【1】布局特点

布局特点 第一、在面板内部,我们可以通过在面板内部,我们可以通过xx和和yy的坐标属性,直接控制控件的位置,非常类似的坐标属性,直接控制控件的位置,非常类似winformwinform中的中的toptop和和leftleft定位。定位。 第二、我们可以直接通过拖放的形式选择控件的位置。我们可以直接通过拖放的形式选择控件的位置。 【2】适用场合】适用场合 第一、一经设计基本上不会有改动的小布局。一经设计基本上不会有改动的小布局。 第二、需要使用绝对定位的布局。需要使用绝对定位的布局。 第三、依赖于横纵坐标的动画。

DockPanelDockPanel面板(停靠)

【1】布局特点】布局特点 根据DockDock属性值,元素向指定方向累积,切分属性值,元素向指定方向累积,切分DockPanelDockPanel内部剩余空间,就像传播停靠一样。内部剩余空间,就像传播停靠一样。 【2】适用场合】适用场合 需要自动填满剩余空间的布局。(最后一个元素自动填满DockPanelDockPanel内的剩余空间)内的剩余空间)

WrapPanelWrapPanel面板(流式布局面板)

流式布局,类似,类似webweb中中divdiv的的floatfloat)) 【1】布局特点】布局特点 第一、在流延伸的方向上会排列尽可能多的控件,排列不下的控件会新起一行。在流延伸的方向上会排列尽可能多的控件,排列不下的控件会新起一行。 第二、使用使用OrientaionOrientaion属性控制流延伸的方向。属性控制流延伸的方向。 【2】适用场合】适用场合 需要根据容器大小动态排列控件的场合。

DataTemplate数据模板绑定

 Grid><ListBox x:Name="list"><ListBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal"><Border Width="10"Height="10"Background="{Binding Code}" /><TextBlock Margin="10,0"Text="{Binding Name}" /></StackPanel></DataTemplate></ListBox.ItemTemplate></ListBox></Grid>
 /// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();​List<Color> text = new List<Color>();text.Add(new Color() { Code = "Red", Name = "红色" });text.Add(new Color() { Code = "Green", Name = "绿色" });text.Add(new Color() { Code = "Blue", Name = "蓝色" });text.Add(new Color() { Code = "pink", Name = "粉色" });text.Add(new Color() { Code = "yellow", Name = "黄色" });text.Add(new Color() { Code = "orange", Name = "橘色" });list.ItemsSource = text;}}public class Color{public string Code { get; set; }public string Name { get; set; }}

 <Slider  x:Name="slider1"Margin="5"ValueChanged="Slider_ValueChanged" /><TextBox x:Name="textbox04"Text="{Binding ElementName=slider1,Path=Value,Mode=OneTime}"Margin="5"Height="30"TextChanged="textbox01_TextChanged" /><TextBox x:Name="textbox05"Text="{Binding ElementName=slider1,Path=Value,Mode=OneWay}"Margin="5"Height="30" /><TextBox x:Name="textbox06"Text="{Binding ElementName=slider1,Path=Value,Mode=OneWayToSource}"Margin="5"Height="30" />

Binding ElementName=slider1,Path=Value是双向绑定

绑定到slider

path是绑定slider的value值

Mode=OneTime是绑定最初第一次的结果后续不跟随改变

Mode=OneWay只允许slider改变textbox

Mode=OneWayToSource只允许textbox改变slider

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

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

相关文章

Paimon下载使用和基础操作说明

简介 Apache Paimon 是一种湖格式&#xff0c;支持使用 Flink 和 Spark 构建实时湖仓一体架构 用于流式处理和批处理操作。Paimon创新性地将湖格式与LSM&#xff08;Log-structured merge-tree&#xff09;相结合 结构&#xff0c;将实时流式更新引入 Lake 架构。 Paimon提供以…

AGE agtype 简介

AGE 使用一种名为 agtype 的自定义数据类型&#xff0c;这是 AGE 返回的唯一数据类型。agtype 是 Json 的超集&#xff0c;也是 JsonB 的自定义实现。 简单数据类型 Null 在Cypher中&#xff0c;null用于表示缺失或未定义的值。概念上&#xff0c;null表示“缺失的未知值”&…

Python数据处理之高效校验各种空值技巧详解

概要 在编程中,处理空值是一个常见且重要的任务。空值可能会导致程序异常,因此在进行数据处理时,必须确保数据的有效性。Python 提供了多种方法来处理不同数据对象的空值校验。本文将详细介绍如何对Python中的各种数据对象进行空值校验,并包含相应的示例代码,帮助全面掌握…

力扣 203反转链表

思路 用cur->next指向pre,把链表倒转 cur后移&#xff0c;cur指向原链表的下一个 注意用tmp存储原链表中cur的后一个 class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *cur head; ListNode *pre nullptr; ListNode *tmp; while (cur ! nul…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验18 边界网关协议BGP

一、实验目的 1.验证边界网关协议BGP的作用&#xff1b; 2.学习在思科路由器上该协议的使用方法。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; …

在小红书用AI做壁纸号,矩阵起号爆卖10000+(详细操作教程)

壁纸号领域一直是一个充满机遇的蓝海项目&#xff0c;由于始终有人对壁纸感兴趣&#xff0c;这种需求永不消逝。 随着AI绘画技术的出现&#xff0c;壁纸的创作更加便捷&#xff0c;不需要自己到处无版权地搬运或者自己动手画&#xff0c;更无需操心版权问题。 零成本、易操作…

羊大师:暑期不“胖”秘籍:羊奶滋养,细嚼慢咽是关键!

夏日炎炎&#xff0c;假期悠长&#xff0c;如何在享受悠闲时光的同时&#xff0c;保持轻盈体态&#xff0c;成了许多人心中的小秘密。今天&#xff0c;就让我们一起揭秘暑期不“胖”的秘籍&#xff0c;让羊奶的滋养与细嚼慢咽的智慧&#xff0c;成为你美丽夏日的守护神。 羊奶轻…

收银系统源码-【满额立减】功能介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

[AI 大模型] Meta LLaMA-2

文章目录 [AI 大模型] Meta LLaMA-2简介模型架构发展新技术和优势示例 [AI 大模型] Meta LLaMA-2 简介 Meta LLaMA-2 是 Meta 推出的第二代开源大型语言模型&#xff08;LLM&#xff09;&#xff0c;旨在为研究和商业应用提供强大的自然语言处理能力。 LLaMA-2 系列模型包括从…

RSRS研报复现——年化21.5%,含RSRS标准分,右偏标准分的Backtrader指标计算(代码+数据)

原创文章第583篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 继续Backtrader&#xff0c;今天讲讲指标扩展。 作为规则型的量化框架&#xff0c;指标是非常重要的元素&#xff0c;它是策略的基础。 我们来扩展一个经典的指标&#xff0c;RSR…

ESP-NOW无线通信

ESP-NOW无线通信 ESP-NOW无线通信协议简介ESP-NOW单向通信ESP-NOW双向通信ESP32的MAC地址总结 ESP-NOW无线通信协议简介 ESP-NOW 是由Espressif开发的基于数据链路层的无线通信协议&#xff0c;它将五层 OSI 上层协议精简为一层&#xff0c;数据传输时无需依次经过网络层、传输…

气膜体育馆的空气质量控制系统智能化管理—轻空间

随着科技的不断进步&#xff0c;气膜体育馆在全球范围内得到了广泛应用。一个重要的原因是其先进的空气质量控制系统&#xff0c;这不仅提高了场馆内部环境的舒适度&#xff0c;也保障了使用者的健康安全。轻空间将详细探讨气膜体育馆的空气质量控制系统是如何实现智能化管理的…

教师管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;教师管理&#xff0c;个人认证管理&#xff0c;课程信息管理&#xff0c;课堂记录管理&#xff0c;课堂统计管理&#xff0c;留言板管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;课程信息…

Web知识库应用程序LibreKB

什么是 LibreKB &#xff1f; LibreKB 是一款知识库 Web 应用程序。免费、开源、自托管&#xff0c;基于 PHP/MySQL。 官方并没有 Docker 镜像&#xff0c;老苏这次图省事&#xff0c;并没有像往常一样构建一个镜像&#xff0c;而是基于 Docker 搭建了一个 LAMP 环境&#xff0…

警惕!焦虑过度的这些症状正在悄悄侵蚀你的生活!

在快节奏的现代社会中&#xff0c;焦虑已成为许多人生活的一部分。适度的焦虑可以激发我们的斗志&#xff0c;推动我们前进。然而&#xff0c;当焦虑过度时&#xff0c;它可能会变成一把双刃剑&#xff0c;对我们的身心健康造成严重威胁。本文将探讨焦虑过度的表现&#xff0c;…

【Python进阶】拷贝、闭包、装饰器,函数分类

目录 一、对象属性和类属性 1、对象属性 2、类属性 二、类方法和静态方法 1、类方法 2、静态方法 3、扩展综合案例 三、深拷贝和浅拷贝 1、浅拷贝 2、深拷贝 3、浅拷贝和深拷贝的区别 四、函数知识 1、函数的定义与调用 2、函数名记录的是引用 3、函数名当作参数…

记录|C#安装+HslCommunication安装

记录线索 前言一、C#安装1.社区版下载2.VS2022界面设置 二、HslCommunication安装1.前提2.安装3.相关文件【重点】 更新记录 前言 初心是为了下次到新的电脑上安装VS2022做C#上机位项目时能快速安装成功。 一、C#安装 1.社区版下载 Step1. 直接点击VS2022&#xff0c;跳转下…

apksigner安装

apksigner安装 下载cmdline-tools获取SDK 组件如果发生报错&#xff1a;Error: Could not determine SDK root.Error: Either specify it explicitly with --sdk_root or move this package into its expected location: <sdk>\cmdline-tools\latest\&#xff0c;并把 安…

首月免月租,手机卡首月免月租什么意思?

手机卡首月免月租是真的吗&#xff1f;只有首月免吗&#xff1f;最近有不少小伙伴来咨询首月免月租这件事了&#xff0c;今天这篇文章就给大家解开这个疑惑。 话不多说&#xff0c;下面让我们直接进入正题&#xff1a; 首先&#xff0c;三大运营商的卡一般只有移动和电信的套餐…

14.爬虫---Selenium 经典动态渲染工具的使用

14.Selenium 经典动态渲染工具的使用 1.查看chrome浏览器版本2.ChromeDriver 安装3.Selenium 安装4.验证安装5.基本用法5.1启动浏览器5.2导航到页面5.3查找元素5.3.1单个元素 find_element5.3.2多个元素 find_elements 5.4 执行操作5.5 动作链ActionChains5.6 执行 JavaScript …