C# WPF编程-布局

C# WPF编程-布局

  • 布局
    • WPF布局原则
    • 布局过程
    • 布局容器
    • 布局属性
    • Border控件
    • StackPanel布局
    • WrapPanel布局
    • DockPanel布局
    • Grid布局
    • UniformGrid布局
    • Canvas布局

布局

WPF布局原则

WPF窗口只能包含单个元素。为在WPF窗口中放置多个元素并创建更贴近实用的用户界面,需要在窗口上放置一个容器,然后在这个容器中添加其他元素。
造成这一限制的原因是Window类继承自ContentControl类。

在WPF窗口布局需要遵循以下几条重要原则:

  • 不应显示设定元素的尺寸:元素应当可以改变尺寸以适合他们的内容。可通过设置最大和最小尺寸来限制可以接受的控件尺寸范围。
  • 不应使用屏幕坐标指定元素的位置:元素应当由它们的容器根据它们之间的尺寸、顺序以及其他特定于具体布局容器的信息进行排列。元素之间添加空白空间,可使用Margin属性。
  • 布局容器的子元素“共享”可用的空间:如果空间允许,布局容器会根据每个元素的内容尽可能为元素设置更合理的尺寸。
  • 可嵌套的布局容器:典型的用户界面使用Grid面板作为开始,Grid面板是WPF中功能最强大的容器,Grid面板可包含其他布局容器,包含的这些容器以更小的分组排列元素,如带有标题的文本框、列表框中的项、工具栏上的图标以及一列按钮等。

布局过程

WPF布局包括两个阶段:测量(measure)阶段和排列(arrange)阶段。测量阶段容器遍历所有子元素,并询问子元素它们所期望的尺寸。排列阶段,容器在合适的位置放置子元素。
注意:布局容器不能提供任何滚动支持。滚动是由特定的内容控件-ScrollViewer提供。

布局容器

所有WPF布局容器都是派生自System.Windows.Controls.Panel抽象类的面板。Panel类添加了少量成员,包括三个共有属性。

在这里插入图片描述
Panel类的共有属性:

  • Background:该属性是用于为面板背景着色的画刷。
  • Children:该属性是在面板中存储的条目集合。
  • IsItemsHost:该属性是一个布尔值,如果面板用于显示与ItemsControls控件关联的项,该属性值为true。

核心布局面板:

  • StackPanel:在水平或垂直的堆栈中放置元素。
  • WrapPanel:在一系列可换行的行中放置元素。水平方向,从左到右放置元素。垂直方向,从上到下放置元素。
  • DockPanel:更加容器的整个边界调整元素。
  • Grid:根据不可见的表格在行个列中排列元素,这是最灵活、最常用的容器之一。
  • UniformGrid:在不可见但是强制所有单元格具有相同尺寸的表中放置元素。
  • Canvas:使用固定坐标绝对定位元素。对于尺寸可变的窗口,不适合使用该布局容器。

StackPanel和WrapPanel面板主要用来控制用户界面中一小部分的布局细节,并非用于控制整个窗口布局。

更专业的面板:

  • TabPanel:在TabPanel面板中包含多个选项卡。
  • ToolbarPanel:工具栏中的多个按钮。
  • ToolbarOverflowPanel:Toolbar控件的溢出菜单中的多个命令。
  • VirtualizingStackPanel:数据绑定列表控件使用该面板以大幅降低开销。
  • InkCanvas:该控件和Canvas控件类似,但该控件支持处理平板电脑上的手写笔输入。

布局属性

名称说明
HorizontalAlignment当水平方向上有额外的空间时,该属性决定了子元素在布局中如何定位。可选值:Center、Left、Right或Stretch等属性值
VerticalAlignment当垂直方向上有额外的空间时,该属性决定了子元素在布局中如何定位。可选值:Center、Top、Bottom或Stretch等属性值
Margin该属性用于在元素的周围添加一定的空间。顶部、底部、左边、右边添加空间
MinWidth和MinHeight这两个属性用于设置元素的最小尺寸
MaxWidth和MaxHeight这两个属性用于设置元素的最打尺寸
Width和Height这两个属性用于设置元素的尺寸

Border控件

Border控件不是布局面板,而是非常便于使用的元素,经常与布局面板一起使用。
Border类的属性:

Background使用Brush对象设置边框中所有内容后面的背景。
BorderBrush和BroderThickness使用Brush对象设置位于Border对象边缘的边框的颜色,并设置边框的宽度。为显示边框必须设置这两个属性
CornerRadius该属性设置边框圆角
Padding该属性在边框和内部的内容之间添加空间
<Window x:Class="WpfHelloWorld.MainWindow"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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfHelloWorld"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid Name="grid1"><Border Margin="5" Padding="5" Background="LightGreen"BorderBrush="SteelBlue" BorderThickness="3,5,3,5"CornerRadius="8" VerticalAlignment="Top"><StackPanel Orientation="Vertical" Margin="5"><Label Margin="3" HorizontalAlignment="Center">按钮 StackPanel布局</Label><Button Margin="3,0,0,0" MaxWidth="200" MinWidth="100">按键1</Button><Button HorizontalAlignment="Right">按键2</Button><Button HorizontalAlignment="Stretch">按键3</Button></StackPanel></Border></Grid>
</Window>

在这里插入图片描述

StackPanel布局

<Window x:Class="WpfHelloWorld.Window1"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:WpfHelloWorld"mc:Ignorable="d"Title="Window1" Height="450" Width="800"><StackPanel><Label>按钮 StackPanel布局</Label><Button>按键1</Button><Button>按键2</Button><Button>按键3</Button></StackPanel>
</Window>

在这里插入图片描述
通过设置Orientation属性,改变排列方向
< StackPanel Orientation=“Horizontal”> 水平方向
< StackPanel Orientation=“Vertical”> 垂直方向
在这里插入图片描述

<StackPanel Orientation="Vertical"><Label HorizontalAlignment="Center">按钮 StackPanel布局</Label><Button HorizontalAlignment="Left">按键1</Button><Button HorizontalAlignment="Right">按键2</Button><Button HorizontalAlignment="Stretch">按键3</Button>
</StackPanel>

在这里插入图片描述

WrapPanel布局

WrapPanel面板在可能得空间中,以一次一行或一列的方式布局控件。

<Window x:Class="WpfHelloWorld.MainWindow"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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfHelloWorld"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid Name="grid1"><WrapPanel Margin="10"><Button VerticalAlignment="Top">Top Button</Button><Button MinHeight="80" >Tall Button</Button><Button VerticalAlignment="Bottom">Bottom Button</Button><Button>Stretch Button</Button><Button VerticalAlignment="Center">Centered Button</Button></WrapPanel></Grid>
</Window>

在这里插入图片描述

DockPanel布局

DockPanel面板,沿着一条外边缘来拉伸所包含的控件。

<Window x:Class="WpfHelloWorld.MainWindow"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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfHelloWorld"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid Name="grid1"><DockPanel LastChildFill="True"><Button DockPanel.Dock="Top">Top Button</Button><Button DockPanel.Dock="Bottom">Bottom Button</Button><Button DockPanel.Dock="Left">Left Button</Button><Button DockPanel.Dock="Right">Right Button</Button><Button>Remaining Space</Button></DockPanel></Grid>
</Window>

在这里插入图片描述

Grid布局

Grid面板是WPF中功能最强大的布局容器。Grid面板也是将窗口分割成更小区域的理想工具。Grid面板常作为窗口的顶级容器。Grid.ShowGridLines属性设置为true,可以显示面板网格线。
Grid面板通过使用对象填充Grid.ColumnDefinitions和Grid.RowDefinitions集合来创建网格。

Grid布局定义:

<Window x:Class="WpfHelloWorld.MainWindow"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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfHelloWorld"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid ShowGridLines="True" Name="grid1"><Grid.RowDefinitions><!-- 两行 --><RowDefinition></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><!-- 三列 --><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions></Grid>
</Window>

在这里插入图片描述

Grid布局添加元素

<Window x:Class="WpfHelloWorld.MainWindow"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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfHelloWorld"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid ShowGridLines="True" Name="grid1"><Grid.RowDefinitions><!-- 两行 --><RowDefinition></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><!-- 三列 --><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><!-- 网格布局添加元素 --><Button Grid.Row="0" Grid.Column="0">Top Left</Button><Button Grid.Row="0" Grid.Column="1">Middle Left</Button><Button Grid.Row="1" Grid.Column="2">Bottom Right</Button><Button Grid.Row="1" Grid.Column="1">Bottom Middle</Button></Grid>
</Window>

在这里插入图片描述

调整行和列
Grid面板支持一次三种设置尺寸的方式:

  • 绝对设置尺寸方式:使用设备无关点位的准确地设置尺寸。难以适应内容大小和容器大小的改变。
  • 自动设置尺寸方式:每行和每列的尺寸刚好满足需要。这是最有用的尺寸设置方式。
  • 按比例设置尺寸方式:按比例将空间分割到一组行和列中。这是对所有行和列的标准设置。
  1. 绝对宽度:
    < ColumnDefinition Width=“100”>< /ColumnDefinition>
  2. 自动尺寸:
    < ColumnDefinition Width=“Auto”>< /ColumnDefinition>
  3. 比例尺寸:
    < ColumnDefinition Width=“*”>< /ColumnDefinition>

如有两行时按比例设置尺寸,第一行的高度是第二行高度的一半:
< RowDefinition Height=“*”>< /RowDefinition>
< RowDefinition Height=“2*”>< /RowDefinition>

<Window x:Class="WpfHelloWorld.MainWindow"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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfHelloWorld"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid ShowGridLines="True" Name="grid1"><Grid.RowDefinitions><!-- 两行 --><RowDefinition Height="*"></RowDefinition><RowDefinition Height="2*"></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><!-- 三列 --><ColumnDefinition Width="100"></ColumnDefinition><ColumnDefinition Width="Auto"></ColumnDefinition><ColumnDefinition Width="*"></ColumnDefinition></Grid.ColumnDefinitions><!-- 网格布局添加元素 --><Button Grid.Row="0" Grid.Column="0">Top Left</Button><Button Grid.Row="0" Grid.Column="1">Middle Left</Button><Button Grid.Row="1" Grid.Column="2">Bottom Right</Button><Button Grid.Row="1" Grid.Column="1">Bottom Middle</Button></Grid>
</Window>

在这里插入图片描述

<Window x:Class="WpfHelloWorld.MainWindow"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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfHelloWorld"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid ShowGridLines="True" Name="grid1"><Grid.RowDefinitions><!-- 两行 --><RowDefinition Height="*"></RowDefinition><RowDefinition Height="Auto"></RowDefinition></Grid.RowDefinitions><TextBox Margin="10" Grid.Row="0">测试文本</TextBox><StackPanel Grid.Row="1" HorizontalAlignment="Right" Orientation="Horizontal"><Button Margin="10,20,2,20" Padding="3">确认</Button><Button Margin="2,10,10,10" Padding="5">取消</Button></StackPanel></Grid>
</Window>

在这里插入图片描述

跨越行和列
使元素跨越多个单元格的属性RowSpan和ColumnSpan。

<Window x:Class="WpfHelloWorld.MainWindow"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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfHelloWorld"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid ShowGridLines="True" Name="grid1"><Grid.RowDefinitions><!-- 两行 --><RowDefinition Height="*"></RowDefinition><RowDefinition Height="Auto"></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="*"></ColumnDefinition><ColumnDefinition Width="Auto"></ColumnDefinition><ColumnDefinition Width="Auto"></ColumnDefinition></Grid.ColumnDefinitions><TextBlock Margin="10" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Background="Green">测试文本</TextBlock><Button Margin="10,10,10,10" Padding="3" Grid.Row="1" Grid.Column="1">OK</Button><Button Margin="2,20,20,20" Padding="5" Grid.Row="1" Grid.Column="2">Cancel</Button></Grid>
</Window>

在这里插入图片描述
分割窗口:
在WPF中,分割条由GridSplitter类表示,它是Grid面板的功能之一。

  • GridSplitter对象必须放在Grid单元格中。
  • GridSpliiter对象,总是改变整行或整列的尺寸。
  • 最初,GridSplitter对象很小不易看见。对于垂直分割条需要将VerticalAlignment属性设为Stretch,并将Width设置为固定值。对于水平分割条,需要设置HorizontalAlignment属性来拉伸,并将Height属性设置为固定值。
  • GridSplitter对齐方式还决定了分割条是水平的还垂直的。
<Window x:Class="WpfHelloWorld.MainWindow"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:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WpfHelloWorld"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid ShowGridLines="False" Name="grid1"><Grid.RowDefinitions><!-- 两行 --><RowDefinition></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition MinWidth="100"></ColumnDefinition><ColumnDefinition Width="Auto"></ColumnDefinition><ColumnDefinition MinWidth="50"></ColumnDefinition></Grid.ColumnDefinitions><Button Grid.Row="0" Grid.Column="0" Margin="3">Left</Button><Button Grid.Row="0" Grid.Column="2" Margin="3">Right</Button><Button Grid.Row="1" Grid.Column="0" Margin="3">Left</Button><Button Grid.Row="1" Grid.Column="2" Margin="3">Left</Button><GridSplitter Background="Green" Grid.Row="0" Grid.Column="1" Grid.RowSpan="2"Width="10" VerticalAlignment="Stretch" HorizontalAlignment="Center"ShowsPreview="False" ></GridSplitter></Grid>
</Window>

ShowsPreview=“False”
在这里插入图片描述

ShowsPreview=“True”
在这里插入图片描述
共享尺寸组
还有一种确定一行或一列尺寸的方法–与其他行或列的尺寸相匹配。共享尺寸的目标是保持用户界面独立部分的一致性。

UniformGrid布局

<UniformGrid Rows="2" Columns="2"><Button>Top Left</Button><Button>Top Right</Button><Button>Bottom Left</Button><Button>Bottom Right</Button>
</UniformGrid>

在这里插入图片描述

Canvas布局

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】【Bluetooth Stack】蓝牙电话协议分析(超详细)

1. 精讲蓝牙协议栈&#xff08;Bluetooth Stack&#xff09;&#xff1a;SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅&#xff0c;【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待&#xff01…

MyBatis框架简述

作用 降低开发人员使用JDBC的难度降低开发人员进行Dao层的开发难度 MyBatis本质上就是对JDBC的封装&#xff0c;通过MyBatis完成CRUD。MyBatis在三层架构中负责持久层的&#xff0c;属于持久层框架。MyBatis的发展历程&#xff1a;【引用百度百科】 MyBatis本是apache的一个开…

图书推荐|高性能Linux网络编程核心技术揭秘

实战基于libevent 的FTP服务器、基于epoll的高并发聊天服务器、基于DPDK的应用案例 本书简介 本书详解高性能Linux网络编程的核心技术及DPDK框架&#xff0c;剖析Nginx高性能服务器架构&#xff0c;实战基于libevent 的FTP服务器、基于epoll的高并发聊天服务器、基于DPDK的应用…

Docker网桥、DockerFile自定义镜像、DockerCompose工具(二)

这里写目录标题 1、网桥1.1、网络相关操作1.1.1、创建网络1.1.2、列出网络1.1.3、加入网络1.1.4、查看网络详情1.1.5、删除网络 2、Dockerfile自定义镜像2.1、镜像结构2.2、Dockerfile语法2.2.1、概述2.2.2、快速入门2.2.1、FROM2.2.2、CMD2.2.3、ENV2.2.4、WORKDIR2.2.5、run2…

关于汽车中网改装需要报备吗?(第二天)

车联网改造需要申报吗&#xff1f; 今天2022年10月20日&#xff0c;小编就给大家介绍一下车联网改装是否需要申报的相关知识。 让我们来看看。 汽车格栅改装无需申报。 这种年检可以直接通过。 您不必担心&#xff0c;因为汽车格栅对于实车的外观来说并不陌生&#xff0c;因此…

设计编程网站集:生活部分:饮食+农业,植物(暂记)

这里写目录标题 植物相关综合教程**大型植物&#xff1a;****高大乔木&#xff08;Trees&#xff09;&#xff1a;** 具有坚硬的木质茎&#xff0c;通常高度超过6米。例如&#xff0c;橡树、松树、榉树等。松树梧桐 **灌木&#xff08;Shrubs&#xff09;&#xff1a;** 比乔木…

flutter使用记录(vscode开发)

1.Gradle-7.6.3-all.zip 下载失败 编辑项目中的 gradle/wrapper/gradle-wrapper.properties 文件&#xff0c;并设置 distributionUrl 的值为可靠的镜像站点&#xff0c;如下所示&#xff1a; distributionUrlhttps\://services.gradle.org/distributions/gradle-7.6.3-all.z…

HarmonyOS ArkTS 基础组件

目录 一、常用组件 二、文本显示&#xff08;Text/Span) 2.1 创建文本 2.2 属性 2.3 添加子组件(Span) 2.4 添加事件 三、按钮&#xff08;Button&#xff09; 3.1 创建按钮 3.2 设置按钮类型 3.3 悬浮按钮 四、文本输入&#xff08;TextInput/TextArea&#xff09;…

个人网站制作 Part 14 添加网站分析工具 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加网站分析工具&#x1f528;使用Google Analytics&#x1f527;步骤 1: 注册Google Analytics账户&#x1f527;步骤 2: 获取跟踪代码 &#x1f528;使用Vue.js&#…

分库分表场景下多维查询解决方案(用户+商户)

在采用分库分表设计时&#xff0c;通过一个PartitionKey根据散列策略将数据分散到不同的库表中&#xff0c;从而有效降低海量数据下C端访问数据库的压力。这种方式可以缓解单一数据库的压力&#xff0c;提升了吞吐量&#xff0c;但同时也带来了新的问题。对于B端商户而言&#…

权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移

知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…

B004-springcloud alibaba 服务容错 Sentinel

目录 高并发带来的问题服务雪崩效应常见容错方案常见的容错思路隔离超时限流熔断降级 常见的容错组件 Sentinel入门什么是Sentinel微服务项目集成Sentinel核心库安装Sentinel控制台实现一个接口的限流 Sentinel的概念和功能基本概念重要功能 Sentinel规则流控规则三种流控模式三…

verilog设计-CDC:单bit脉冲快时钟域到慢时钟域

一、前言 当单bit信号由快时钟域传递给慢时钟域时&#xff0c;快时钟域的异步信号最小可为快时钟信号的一个时钟周期脉冲&#xff0c;快时钟域的单时钟周期脉冲长度小于慢时钟域的时钟周期&#xff0c;很有可能该脉冲信号在慢时钟域的两个时钟上升沿之间&#xff0c;导致该脉冲…

Flask中的Blueprints:模块化和组织大型Web应用【第142篇—Web应用】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask中的Blueprints&#xff1a;模块化和组织大型Web应用 在构建大型Web应用时&#xff0…

数据机构-2(顺序表)

线性表 概念 顺序表 示例&#xff1a;创建一个存储学生信息的顺序表 表头&#xff08;Tlen总长度&#xff0c; Clen当前长度&#xff09; 函数 #include <seqlist.c> #include <stdio.h> #include <stdlib.h> #include "seqlist.h" #include &…

【论文精读】OTA: Optimal Transport Assignment for Object Detection(物体探测的最优传输分配)

OTA最优传输 &#x1f680;&#x1f680;&#x1f680;摘要一、1️⃣ Introduction---介绍二、2️⃣Related Work---相关工作2.1 &#x1f393; Fixed Label Assignment--静态标签分配2.2 ✨Dynamic Label Assignment--动态标签分配 三、3️⃣Method---论文方法3.1 &#x1f39…

Linux - 应用层HTTPS、传输层TCP/IP模型中典型协议解析

目录 应用层&#xff1a;自定制协议实例 HTTP协议首行头部空行正文http服务器的搭建 HTTPS协议 传输层UDP协议TCP协议 应用层&#xff1a; 应用层负责应用程序之间的沟通—程序员自己定义数据的组织格式 应用层协议&#xff1a;如何将多个数据对象组织成为一个二进制数据串进行…

【探讨】基于卷积神经网络深度学习模型的光场显微三维粒子空间分布重建

光场显微粒子图像测速技术通过单光场相机即可实现微尺度三维速度场的测量&#xff0c;但单光场相机角度信息有限&#xff0c;导致粒子重建的轴向分辨率低、重建速度慢。基于此&#xff0c;提出一种基于卷积神经网络深度学习模型的光场显微粒子三维空间分布重建方法&#xff0c;…

说说你对webpack的理解?解决了什么问题?

文章目录 一、背景二、问题三、是什么参考文献 一、背景 Webpack 最初的目标是实现前端项目的模块化&#xff0c;旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候&#xff0c;我们会通过文件划分的形式实现模块化&#xff0c;也就是将每个功能及其相关状态数据各…

浅谈如何自我实现一个消息队列服务器(2)——实现 broker server 服务器

文章目录 一、实现 broker server 服务器1.1 创建一个SpringBoot项目1.2 创建Java类 二、硬盘持久化存储 broker server 里的数据2.1 数据库存储2.1.1 浅谈SQLiteMyBatis 2.1.2 如何使用SQLite 2.2 使用DataBaseManager类封装数据库操作2.3 文件存储消息2.3.1 存储消息时&#…