WPF布局、控件与样式

news2025/1/11 10:12:26

视频来源:https://www.bilibili.com/video/BV1HC4y1b76v/

布局

常用布局属性

  • HorizontalAlignment:用于设置元素的水平位置
  • VerticalAlignment:用于设置元素的垂直位置
  • Margin:指定元素与容器的边距
  • Height:指定元素的高度
  • Width:指定元素的宽度
  • WinHeight/WinWidth:指定元素的最小高度和宽度
  • MaxHeight/MaxWidth:指定元素的最大高度和宽度
  • Padding:指定元素内部边距

常用布局容器

1、Grid

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

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

Grid.RowDefinitions:可以创建任意行,进行固定高度与百分比或自适应高度设置。

Grid.ColumnDefinitions:可以创建任意列,进行固定宽度与百分或自适应宽度设置。

<Grid ShowGridLines="True">
	<Grid.RowDefinitions>
    	<RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.CloumnDefinitions>
    	<CloumnDefinition/>
        <CloumnDefinition/>
    </Grid.CloumnDefinitions>
</Grid>

在这里插入图片描述

2、StackPanel

Windows可以只包含一个元素,作为其内容。如果要在其中包含多个元素,就可以将 stackPanel用作Windows的一个子元素,并在 stackPanel的 内容中添加元素。stackPanel是 一个简单的容器控件,只能逐个地显示元素。stackPanel的 方向可以是水平或垂直。TooBarPancl类 派生自stackPanel。

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

<StackPanel Orientation="Horizontal">
	<Button Width="100" Height="40" Background="Red"/>
	<Button Width="100" Height="40" Background="Yellow"/>
	<Button Width="100" Height="40" Background="Blue"/>
	<Button Width="100" Height="40" Background="Green"/>
</StackPanel>

在这里插入图片描述

3、WarpPanel

WrapPanel将子元素 自左向右逐个地排列,若一个水平行中放不下,就排在下一行。面板的方向可以是水平或垂直。

WrapPanel与StackPanel类似的功能,相当于WrapPanel,具有在有限容器范围内,可以自动换行,或者换行处理。具体取决于WrapPanel的排列方式(Orientation)。默认水平布局方向。

<WrapPanel>
	<Button Width="100" Height="40" Background="Red"/>
	<Button Width="100" Height="40" Background="Yellow"/>
	<Button Width="100" Height="40" Background="Blue"/>
	<Button Width="100" Height="40" Background="Green"/>
	<Button Width="100" Height="40" Background="#54FF9F"/>
	<Button Width="100" Height="40" Background="#6A5ACD"/>
</WrapPanel>

在这里插入图片描述

4、Dockpanel

包含在DockPanel中元素,具备DockPanel.Dock的四个枚举值(Top/Lrft/Right/Bottom)用于设置元素的锚定位置。

LastChildFill:容器中的最后一个元素时,默认该元素填充DockPanel所有空间,默认值为True。

DockPanel中的元素未显示添加DockPanel.Dock属性时,系统则会默认为DockPanel.Dock = “Left”。

<DockPanel LastChildFill="False">
	<Button DockPanel.Dock="Top" Width="150" Height="60" Background="Red"/>
	<Button DockPanel.Dock="Left" Width="150" Height="60" 	Background="Yellow"/>
	<Button DockPanel.Dock="Right" Width="150" Height="60" Background="Blue"/>
	<Button DockPanel.Dock="Bottom" Width="150" Height="60" Background="Green"/>
</DockPanel>

在这里插入图片描述

5、UniformGrid

与Grid不同的是,该容器具备Columns/Rows属性,通过设置该属性,UniformGrid则具备相应的行与列,但是设置的Columns/Rows不允许单独的进行容器的大小设置。

位于UniformGrid中的子元素,按输入顺序排列至容器中,直至填充容器的所有空间。

未显示指定Columns/Rows,UniformGrid则为子元素动态分配Column/Rows,换行与换行的基准主要基于UniformGrid的容器大小(宽度与高度)。

<UniformGrid>
	<Button DockPanel.Dock="Top" Width="150" Height="60" Background="Red"/>
	<Button DockPanel.Dock="Left" Width="150" Height="60" Background="Yellow"/>
	<Button DockPanel.Dock="Right" Width="150" Height="60" Background="Blue"/>
	<Button DockPanel.Dock="Bottom" Width="150" Height="60" Background="Green"/>
</UniformGrid>

在这里插入图片描述

控件

日常工作中与我们打交道最多的控件无外乎6类:

1、布局控件:可以容纳多个控件或嵌套其他布局控件,用于UI上组织和排列控件。Grid,StackPanel等,他们拥有共同的父类Panel

2、内容控件:只能容纳一个其他控件或布局控件作为他的内容。Button、Window等,他们的共同父类是ContentControl

3、带标题内容控件:相当于一个内容控件,但可以加一个标题,标题部分亦可容纳一个控件或布局。GroupBox,TabItem等,他们共同的父类是HeaderedContentControl

4、条目控件:可以显示一列数据,一般情况下这列数据的类型相同。ListBox、ComboBox等。他们共同的基类是ItemsControl

5、带标题条目控件:相当于一个条目控件,但可以加一个标题显示区。TreeViewItem,MenuItem等。此类空间的共同基类是HeaderedItemsControl

6、特殊内容控件:比如TextBox容纳的是字符串、TextBlock可以容纳可自由控制格式的文本,Image容纳图片类型数据。这类控件相对比较独立。

六类控件的派生关系如下图:
在这里插入图片描述

WPF的UI元素的类型

名称注释
ContentControl单一内容控件
HeaderedContentControl带标题的单一内容控件
ItemsControl以条目集合胃内容的控件
HeaderedItemsControl带标题的以条目集合为内容的控件
Decorator控件装饰元素
Panel面板类元素
Adorner文字点缀元素
Flow Text流式文本元素
TextBox文本输入框
TextBlock静态文字
Shape图形元素

问题

为什么有一些元素是Content显示内容,而一些元素是Text显示内容?

凡是继承于ContentControl的控件,他们的定义内容用Content,除了TextBlock使用的是Text,大部分都是Content设置其显示内容。

为什么有一些元素是Padding,而有一些元素并没有?

在继承于Control下得大部分控件具备这个Padding属性,TextBlock则单独实现了Padding属性。

Magin和Padding的区别是?

Magin:外边距

Padding:内边距

样式

控件的Style属性可以赋予包含Setter相关联的Style元素。Setter元素定义Property和Value属性,并给指定的属性设置一个值。这里设置Background、FontSize和FontWeight属性。

把Style设置为TargetType Button,以便可以直接访问Button的属性。如果没有设置样式的TargetType,就可以通过Button.Background、Button.FontSize访问属性。

WPF中的各类控件元素,都可以自由的设置其样式。

字体(FontFamily)

字体大小(FontSize)

背景颜色(Backgroud)

字体颜色(Foreground)

边距(Margin)

水平位置(HorizontalAlignment)

垂直位置(VerticalAlignment)

而样式则是组织和重用以上的重要工具。不是使用重复的标记填充XAML,通过Styles创建一系列封装所有这些细节的样式。然后通过元素的style属性设定其样式。

<Window.Resources>
    <!--我们定义了一个名为CustomButtonStyle的样式,并将其目标类型设置为Button。通过<Setter>元素,我们设置了按钮的Background、Foreground和FontSize属性。-->
    <Style x:Key="CustomButtonStyle" TargetType="Button">
        <Setter Property="Background" Value="Blue"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="FontSize" Value="14"/>
    </Style>
</Window.Resources>
    <!--引用我们定义的样式CustomButtonStyle-->
    <Button Style="{StaticResource CustomButtonStyle}" Width="100" Height="40" Content="Click Me"/>

样式继承

BasedOn

<Window x:Class="EventLearn.UseStyle"
        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:EventLearn"
        mc:Ignorable="d"
        Title="UseStyle" Height="450" Width="800">

    <Window.Resources>
        <Style x:Key="BaseStyle" TargetType="Button">
            <Setter Property="Width" Value="100"/>
            <Setter Property="Height" Value="40"/>
            <Setter Property="Foreground" Value="Red"/>
        </Style>
        <Style x:Key="style1" TargetType="Button" BasedOn="{StaticResource BaseStyle}">
            <Setter Property="Content" Value="Hello"/>
        </Style>
    </Window.Resources>
    <Grid>
        <StackPanel>
            <Button Style="{StaticResource style1}" />
            <Button Style="{StaticResource style1}"/>
            <Button Style="{StaticResource style1}"/>
        </StackPanel>
    </Grid>
</Window>

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

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

相关文章

AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。

AMRT3D 一、概述 1、提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能&#xff0c;并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 2、轻量化技术应用与个性化定制 AMRT3D适用于快速开…

《雷德斯东家》 第一话——火把花的回忆

引子 温馨提示:本系列小说为福瑞向! ------------------------------------------------------------------------------------------------------------------------- 作者 RedstoneCuberoot 地图 RedstoneCuberoot、梓元sama 审核 Brenda_fyx、RedstoneCuberoot Minecraft大…

Linux_socket编程

套接字通信 socket 接口 守护进程 一.套接字通信 端口号&#xff1a; 端口号是一个2字节16位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; 一台主机可以根据ip地址定位另一台主机&#xff0c;而两台主机之间的通信本质是进程在通信。…

stm32-编码器测速

一、编码器简介 编码电机 旋转编码器 A,B相分别接通道一和二的引脚&#xff0c;VCC&#xff0c;GND接单片机VCC&#xff0c;GND 二、正交编码器工作原理 以前的代码是通过触发外部中断&#xff0c;然后在中断函数里手动进行计次。使用编码器接口的好处就是节约软件资源。对于频…

QT下跨平台库实现及移植经验分享

最近在移植公司一个QT桌面软件到android上&#xff0c;有一些公司自定义的库&#xff0c;用了很多windows的api&#xff0c;移植过程很是曲折&#xff0c;在此有一些感悟分享一下~ 一.自编写跨平台库 1.有时候为了程序给第三方用需要编译一些qt封装库&#xff0c;并可能跨平台…

思科防火墙如何进行ACL操作

环境&#xff1a; 思科防火墙ASA5555 Cisco Adaptive Security Appliance Software Version 9.4(2)6 Device Manager Version 7.5(2)153 问题描述&#xff1a; 思科防火墙如何进行ACL操作 解决方案&#xff1a; 进入en模式 1.查看现有全部list show running-config | i…

stm32-定时器输出比较PWM

目录 一、输出比较简介 二、PWM简介 三、输出比较模式实现 1.输出比较框图(以通用定时器为例) 2.PWM基本结构 四、固件库实现 1.程序1&#xff1a;PWM呼吸灯 2.程序2&#xff1a;PWM驱动直流电机 3.程序3&#xff1a;控制舵机 一、输出比较简介 死区生成和互补输出一般…

Tomcat Session集群---会话绑定

实验配置&#xff1a; 7-1安装Nginx 7-2和7-3安装Tomcat 1.配置7-1 1.做负载均衡&#xff0c;反向代理 [rootlocalhost ~]# vim /etc/nginx/nginx.conf17 http {18 upstream tomcat {19 server 192.168.91.102:8080;20 server 192.168.91.103:8080;2…

ideaSSM校医院管理网页模式开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea ssm 校医院管理系统是一套完善的完整信息管理系统&#xff0c;结合SSM框架完成本系统SpringMVC spring mybatis &#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c; 系统具有完整的源代码和数据…

HarmonyOS应用开发者高级认证答案

** HarmonyOS应用开发者高级认证 ** 以下是高级认证答案&#xff0c;存在个别选项随机顺序答案&#xff0c;自行辨别 判断题 云函数打包完成后&#xff0c;需要到 AppGallery Connect 创建对应函数的触发器才可以在端侧中调用 错 在 column 和 Row 容器组件中&#xff0c;a…

UDF提权

目录 一、UDF概述 二、提权条件 三、漏洞复现 (一) 信息收集 1. Nmap信息收集 1.1、查看当前IP地址 1.2、扫描当前网段&#xff0c;找出目标机器 1.3、快速扫描目标机全端口 2. dirb目录扫描 3. 第一个flag 3.1、目录遍历漏洞 3.2、flag 4. 敏感信息利用 (二) 漏…

Hive-技术补充-初识ANTLR

一、背景 要清晰的理解一条Hql是如何编译成MapReduce任务的&#xff0c;就必须要学习ANTLR。下面是ANTLR的官方网址&#xff0c;下面让我们一起来跟着官网学习吧&#xff0c;在学习的过程中我参考了《antlr4权威指南》&#xff0c;你也可以读下这本书&#xff0c;一定会对你有…

labview技术交流-判断两个数组的元素是否完全相同

问题来源 分析并判断两个一维数组中包含的元素是否完全相同&#xff0c;不考虑索引顺序。比如说[1,5,7,3]和[3,5,7,1]是完全相同的两个一维数组&#xff0c;那[1,5,7,3]和[5,7,1,4]就不是相同的数组。结合我给出的示例&#xff0c;大家有没有什么思路呢&#xff1f; 思路分析 …

Java数据结构-优先级队列

文章目录 前言一、优先级队列1.1 概念 二、优先级队列的模拟实现2.1 堆的概念2.2 堆的存储方式2.3 堆的创建2.3.1 堆向下调整2.3.2 堆的创建2.3.3 建堆的时间复杂度 2.4 堆的插入与删除2.4.1 堆的插入2.4.2 堆的删除 2.5 用堆模拟实现优先级队列 三、常用接口介绍3.1 PriorityQ…

MediaBox音视频终端SDK已适配鸿蒙星河版(HarmonyOS NEXT)

2024年1月&#xff0c;HarmonyOS NEXT 鸿蒙星河版系统开发者预览版开放申请&#xff0c;该系统将只能安装为鸿蒙开发的原生应用&#xff0c;而不再兼容安卓应用。对此&#xff0c;阿里云MediaBox音视频终端SDK产品已实现功能的鸿蒙化迁移和重构&#xff0c;全面适配鸿蒙系统Har…

Html提高——HTML5 新增的语义化标签

引入&#xff1a; 以前布局&#xff0c;我们基本用 div 来做。div 对于搜索引擎来说&#xff0c;是没有语义的。 但是在html5里增加了语义化标签&#xff0c;如 <header>&#xff1a;头部标签 <nav>&#xff1a;导航标签 <article>&#xff1a;内容标签 &…

ASP.NET Mvc+FFmpeg+Video实现视频转码

目录 首先&#xff0c;做了视频上传的页面&#xff1a; FFmpeg&#xff1a;视频转码 FFmpegHelper工作类&#xff1a; 后台控制器代码&#xff1a; 前端视图代码&#xff1a; 参考文章&#xff1a; 首先&#xff0c;做了视频上传的页面&#xff1a; 借鉴了这篇文章 ASP.…

Qt学习--this指针的使用

在 C 中&#xff0c;this 指针是一个特殊的指针&#xff0c;它指向当前对象的实例。 在 C 中&#xff0c;每一个对象都能通过 this 指针来访问自己的地址。 this是一个隐藏的指针&#xff0c;可以在类的成员函数中使用&#xff0c;它可以用来指向调用对象。 当一个对象的成员…

【算法杂货铺】二分算法

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 朴素二分查找 &#x1f4c2; 朴素二分模板 &#x1f4c1; 查找区间端点处 细节&#xff08;重要&#xff09; &#x1f4c2; 区间左端点处模板 &#x1f4c2; 区间右端点处模板 &#x1f4c1; 习题 1. 35. 搜索插入位…

实验01 ASP.NET网站的建立及运行

【实验目的】 &#xff08;1&#xff09;能熟悉ASP.NET的开发环境Visual Studio Community 2019&#xff08;VSC 2019&#xff09;。 &#xff08;2&#xff09;能通过解决方案管理网站&#xff0c;会在解决方案中创建网站。 &#xff08;3&#xff09;会设置IIS 10中的网站…