浅谈WPF之UI布局

news2024/11/16 1:47:20

一个成功的软件,离不开人性化的UI设计,如何抓住用户第一视觉,让用户产生依赖感,合适优雅的布局必不可少。本文以一些简单的小例子,简述WPF中布局 面板 控件的使用,仅供学习分享使用,如有不足之处,还请指正。

图片

涉及知识点

在WPF中,关于布局面板控件,主要有以下几种:

  1. StackPanel栈面板,可以将元素排列成一行或者一列。其特点是:每个元素各占一行或者一列。

  2. WrapPanel环绕面板,将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够时就会自动调整进行换行后续排序按照从上至下或从左至右的顺序进行。

  3. DockPanel停靠面板,定义一个区域,在此区域中,您可以使子元素通过描点的形式排列这些对象位于 Children 属性中。

  4. Grid网格面板, Grid顾名思义就是“网格”,以表格形式布局元素,对于整个面板上的元素进行布局,它的子控件被放在一个一个事先定义好的小格子里面,整齐配列Grid和其他各个Panel比较起来,功能最多也最为复杂。

  5. Canvas画布面板,画布,用于完全控制每个元素的精确位置他是布局控件中最为简单的一种,直接将元素放到指定位置,主要来布置图面。

StackPanel【栈面板】

栈面板,可以将元素排列成一行或者一列,其特点是:每个元素各占一行或者一列

Orientation属性指定排列方式:

  1. Vertical(垂直)【默认】,垂直排列时,每个元素都与面板一样宽。

  2. Horizontal(水平),水平排列时,每个元素都与面板一样高;

如果包含的元素超过了面板空间,它只会截断多出的内容。元素的Margin属性用于使元素之间产生一定得间隔,当元素空间大于其内容的空间时,剩余空间将由HorizontalAlignment和 VerticalAlignment属性来决定如何分配。

Vertical(垂直),默认情况下,每一个元素都与面板一样宽,如下所示:

图片

 示例代码,如下所示:

<Window x:Class="WpfApp1.SecondWindow"
        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:WpfApp1"
        mc:Ignorable="d"
        Title="StackPanel示例" Height="450" Width="500">


    <StackPanel Margin="5,5,5,5">
        <Button x:Name="button1" Content="第一个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button2" Content="第二个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button3" Content="第三个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button4" Content="第四个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button5" Content="第五个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button6" Content="第六个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button7" Content="第七个按钮" Margin="2,5,2,5"></Button>
    </StackPanel>
</Window>

Horizontal(水平),水平排列时,每个元素都与面板一样高。如下所示:

图片

示例代码,与垂直排列相同,只是多了一个Oriention属性,如下所示:

<StackPanel Margin="5,5,5,5" Orientation="Horizontal">
    <Button x:Name="button1" Content="第一个按钮" Margin="2,5,2,5"></Button>
    <Button x:Name="button2" Content="第二个按钮" Margin="2,5,2,5"></Button>
    <Button x:Name="button3" Content="第三个按钮" Margin="2,5,2,5"></Button>
    <Button x:Name="button4" Content="第四个按钮" Margin="2,5,2,5"></Button>
    <Button x:Name="button5" Content="第五个按钮" Margin="2,5,2,5"></Button>
    <Button x:Name="button6" Content="第六个按钮" Margin="2,5,2,5"></Button>
    <Button x:Name="button7" Content="第七个按钮" Margin="2,5,2,5"></Button>
</StackPanel>

StackPanel其他常用属性:

  1. HorizontalAlignment:水平对齐方式,值:Left,Center,Right,Stretch。

  2. VerticalAlignment:垂直对齐方式,值:Bottom , Center,Stretch,Top。

  3. Visibility:设置StackPanel是否可见,值:Visible,Hidden,Collapsed。

  4. Background:设置背景颜色,值为Bursh类型的枚举值。

  5. Width,Height,MinWidth,MinHeight,MaxWidth,MaxHeight:分别用来设置StackPanel的宽,高,最小宽,最小高,最大宽,最大高。

WrapPanel【环绕面板】

WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够时就会自动调整进行换行后续排序按照从上至下或从左至右的顺序进行。

水平排列:当Orientation属性的值设置为 Horizontal:元素是从左向右排列的,然后自上至下自动换行。如下所示:

图片

 示例源码所示:

<Window x:Class="WpfApp1.ThirdWindow"
        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:WpfApp1"
        mc:Ignorable="d"
        Title="WrapPanel示例" Height="450" Width="400">
    <WrapPanel Margin="5,5,5,5">
        <Button x:Name="button1" Content="第一个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button2" Content="第二个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button3" Content="第三个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button4" Content="第四个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button5" Content="第五个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button6" Content="第六个按钮" Margin="2,5,2,5"></Button>
        <Button x:Name="button7" Content="第七个按钮" Margin="2,5,2,5"></Button>

    </WrapPanel>
</Window>

垂直排列:默认为水平排列,通过设置WrapPanel的Orientation属性为Vertical,可以修改排列方向,垂直排列,如下所示:

图片

 示例源码如下所示:

<WrapPanel Margin="5,5,5,5" Orientation="Vertical">
    <Button x:Name="button1" Content="第一个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button2" Content="第二个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button3" Content="第三个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button4" Content="第四个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button5" Content="第五个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button6" Content="第六个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button7" Content="第七个按钮" Margin="2,5,2,5" Height="40"></Button>

</WrapPanel>

WrapPanel其他常用属性,除了StackPanel属性常用属性,还有两个,如下所示:

  1. ItemHeight:所有的元素都相同高度。

  2. ItemWidth:所有的元素都相同宽度。

其他子元素设置的属性,如果大于ItemHeight,ItemWidth的值,则被截取。如下所示:

 源码如下所示:

<WrapPanel Margin="5,5,5,5" Orientation="Vertical" ItemHeight="30" ItemWidth="100">
    <Button x:Name="button1" Content="第一个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button2" Content="第二个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button3" Content="第三个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button4" Content="第四个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button5" Content="第五个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button6" Content="第六个按钮" Margin="2,5,2,5" Height="40"></Button>
    <Button x:Name="button7" Content="第七个按钮" Margin="2,5,2,5" Height="40"></Button>

</WrapPanel>

DockPanel【停靠面板】

DockPanel定义一个区域,在此区域中,您可以使子元素通过描点的形式排列,这些对象位于 Children 属性中。停靠面板类似于WinForm中控件的Dock属性。DockPanel会对每个子元素进行排序,并将根据指定的边进行停靠,多个停靠在同侧的元素则按顺序排序。在DockPanel中,指定停靠边的控件,会根据定义的顺序占领边角,所有控件绝不会交叠。

默认情况下,所有子元素都是靠左停靠【DockPanel.Dock=Left】

图片

可以单独设置每一个子元素的Dock属性,如下所示:

图片

示例源码如下所示:

<Window x:Class="WpfApp1.FourWindow"
        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:WpfApp1"
        mc:Ignorable="d"
        Title="DockPanel示例" Height="450" Width="600">
    <DockPanel LastChildFill="True" >
        <Button x:Name="button1" Content="第一个按钮" Margin="2,5,2,5" DockPanel.Dock="Left"></Button>
        <Button x:Name="button2" Content="第二个按钮" Margin="2,5,2,5" DockPanel.Dock="Top"></Button>
        <Button x:Name="button3" Content="第三个按钮" Margin="2,5,2,5" DockPanel.Dock="Right"></Button>
        <Button x:Name="button4" Content="第四个按钮" Margin="2,5,2,5" DockPanel.Dock="Bottom"></Button>
        <Button x:Name="button5" Content="第五个按钮" Margin="2,5,2,5" DockPanel.Dock="Left"></Button>
        <Button x:Name="button6" Content="第六个按钮" Margin="2,5,2,5" DockPanel.Dock="Top"></Button>
        <Button x:Name="button7" Content="第七个按钮" Margin="2,5,2,5" DockPanel.Dock="Right"></Button>
        <Button x:Name="button8" Content="第八个按钮" Margin="2,5,2,5" DockPanel.Dock="Bottom"></Button>
        <Button x:Name="button9" Content="第九个按钮" Margin="2,5,2,5"></Button>
    </DockPanel>
</Window>

注意:在DockPanel中,元素的先后顺序很重要,关系着元素是否“顶边”。

 DockPanel其他常用属性,除了StackPanel属性常用属性,还有一个,如下所示:

  1. LastChildFill:最后一个子元素,是否填充剩余空间,默认为True。

Grid【网格面板】

Grid顾名思义就是“网格”,以表格形式布局元素,对于整个面板上的元素进行布局,它的子控件被放在一个一个事先定义好的小格子里面,整齐配列。Grid和其他各个Panel比较起来,功能最多也最为复杂。

要使用Grid,首先要向RowDefinitions和ColumnDefinitions属性中添加一定数量的RowDefinitions和 ColumnDefinitions元素,从而定义行数和列数。

而放置在Grid面板中的控件元素都必须显示采用Row和Column附加属性定义其放置所在的行和列,这两个属性的值都是从0开始的索引数如果没有显式设置任何行或列,Grid将会隐式地将控件加入在第0行第0列。

由于Grid的组成并非简单的添加属性标记来区分行列,这也使得用户在实际应用中可以具体到某一单 元格中,所以布局起来就很精细了。 

Grid的单元格可以是空的,一个单元格中可以有多个元素,而在单元格中元素是根据它们的Z顺序一个接着一个呈现的。

Grid面板将元素分割到不可见的行列网格中。尽管可以在一个单元格中放置多个元素(这时这些元素会相互重叠),但在每个单元格中只放置一个元素通常更合理。当然,在Grid单元格中的元素本身也可能是另一个容器,该容器组织它所包含的一组控件。

默认情况下,如果不设置Grid面板的行列宽,与高,则默认均分,且如果不显示设置子元素的大小,则默认填充,如下所示:

 

图片

 示例代码,如下所示:

<Window x:Class="WpfApp1.FiveWindow"
        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:WpfApp1"
        mc:Ignorable="d"
        Title="GridPanel示例" Height="450" Width="700">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Button x:Name="button1" Content="第一个按钮" Margin="2,5,2,5" Grid.Row="0" Grid.Column="0"></Button>
        <Button x:Name="button2" Content="第二个按钮" Margin="2,5,2,5" Grid.Row="0" Grid.Column="1"></Button>
        <Button x:Name="button3" Content="第三个按钮" Margin="2,5,2,5" Grid.Row="0" Grid.Column="2"></Button>
        <Button x:Name="button4" Content="第四个按钮" Margin="2,5,2,5" Grid.Row="1" Grid.Column="0"></Button>
        <Button x:Name="button5" Content="第五个按钮" Margin="2,5,2,5" Grid.Row="1" Grid.Column="1"></Button>
        <Button x:Name="button6" Content="第六个按钮" Margin="2,5,2,5" Grid.Row="1" Grid.Column="2"></Button>
        <Button x:Name="button7" Content="第七个按钮" Margin="2,5,2,5" Grid.Row="2" Grid.Column="0"></Button>
        <Button x:Name="button8" Content="第八个按钮" Margin="2,5,2,5" Grid.Row="2" Grid.Column="1"></Button>
        <Button x:Name="button9" Content="第九个按钮" Margin="2,5,2,5" Grid.Row="2" Grid.Column="2"></Button>
    </Grid>

</Window>

Grid行高与列宽设置

列宽和行高,分别可以在ColumnDefinition、RowDefinition里面指定Width、Height的值。

设置宽与高的几种方式:

  1. 固定值:设置具体的数字,单位为像素px。

  2. Auto:根据子元素的大小,自动分配大小,刚好能够容纳子元素的内容。

  3. 星号*:根据比例自动分配剩余空间。

行高列宽设置示例

图片

示例源码如下所示:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"></RowDefinition>
        <RowDefinition Height="2*"></RowDefinition>
        <RowDefinition Height="3*"></RowDefinition>
     </Grid.RowDefinitions>
     <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"></ColumnDefinition>
        <ColumnDefinition Width="2*"></ColumnDefinition>
        <ColumnDefinition Width="3*"></ColumnDefinition>
     </Grid.ColumnDefinitions>
    <Button x:Name="button1" Content="第一个按钮" Margin="2,5,2,5" Grid.Row="0" Grid.Column="0"></Button>
    <Button x:Name="button2" Content="第二个按钮" Margin="2,5,2,5" Grid.Row="0" Grid.Column="1"></Button>
    <Button x:Name="button3" Content="第三个按钮" Margin="2,5,2,5" Grid.Row="0" Grid.Column="2"></Button>
    <Button x:Name="button4" Content="第四个按钮" Margin="2,5,2,5" Grid.Row="1" Grid.Column="0"></Button>
    <Button x:Name="button5" Content="第五个按钮" Margin="2,5,2,5" Grid.Row="1" Grid.Column="1"></Button>
    <Button x:Name="button6" Content="第六个按钮" Margin="2,5,2,5" Grid.Row="1" Grid.Column="2"></Button>
    <Button x:Name="button7" Content="第七个按钮" Margin="2,5,2,5" Grid.Row="2" Grid.Column="0"></Button>
    <Button x:Name="button8" Content="第八个按钮" Margin="2,5,2,5" Grid.Row="2" Grid.Column="1"></Button>
    <Button x:Name="button9" Content="第九个按钮" Margin="2,5,2,5" Grid.Row="2" Grid.Column="2"></Button>
</Grid>

Grid面板其他属性,除了StackPanel属性常用属性,还有两个,如下所示:

  1. Grid.ColumnSpan:用于设置元素跨越的单元格列数。

  2. Grid.RowSpan:用于设置元素跨越的单元格行数。

Canvas【画布面板】

画布,用于完全控制每个元素的精确位置。他是布局控件中最为简单的一种,直接将元素放到指定位置,主要来布置图面

使用Canvas,必须指定一个子元素的位置(相对于画布),否则所有元素都将出现在画布的左上角。如果Canvas是窗口主元素(即最外层的布局面板是Canvas),用户改变窗口大小时,Canvas也会随之变化,子元素的位置也会随之移动,以保证相对于Canvas的位置属性不变。

Canvas通过设置Left,Top,Bottom,Right等属性的值,来设置子元素的位置。如下所示:

图片

示例源码,如下所示:

<Window x:Class="WpfApp1.SixWindow"
        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:WpfApp1"
        mc:Ignorable="d"
        Title="Canvas面板示例" Height="500" Width="500">
    <Canvas>
        <Button x:Name="button1" Content="第一个按钮" Margin="2,5,2,5" Canvas.Left="0" Canvas.Top="0"></Button>
        <Button x:Name="button2" Content="第二个按钮" Margin="2,5,2,5" Canvas.Left="50" Canvas.Top="50"></Button>
        <Button x:Name="button3" Content="第三个按钮" Margin="2,5,2,5" Canvas.Left="100" Canvas.Top="100"></Button>
        <Button x:Name="button4" Content="第四个按钮" Margin="2,5,2,5" Canvas.Left="150" Canvas.Top="150"></Button>
        <Button x:Name="button5" Content="第五个按钮" Margin="2,5,2,5" Canvas.Left="200" Canvas.Top="200"></Button>
        <Button x:Name="button6" Content="第六个按钮" Margin="2,5,2,5" Canvas.Left="250" Canvas.Top="250"></Button>
        <Button x:Name="button7" Content="第七个按钮" Margin="2,5,2,5" Canvas.Left="300" Canvas.Top="300"></Button>
        <Button x:Name="button8" Content="第八个按钮" Margin="2,5,2,5" Canvas.Left="350" Canvas.Top="350"></Button>
        <Button x:Name="button9" Content="第九个按钮" Margin="2,5,2,5" Canvas.Left="400" Canvas.Top="400"></Button>
    </Canvas>
</Window>

注意:要说明一点Canvas内的子控件不能使用两个以上的Canvas附加属性如果同时设置Canvas.Left和Canvas.Right属性,那么后者将会被忽略。

Canvas的其他属性,除了StackPanel的常用属性外,还有两个属性,如下所示:

  1. ClipToBounds:超出边界部分,是否需要进行剪裁。

  2. Panel.ZIndex:用于设置子元素在Z方向上的顺序,值越大,越靠上。如果两个元素重叠,则ZIndex值小的将会被覆盖。

以上就是【浅谈WPF之UI布局】的全部内容,关于更多详细内容,可参考官方文档。希望能够一起学习,共同进步。

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

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

相关文章

精品基于Uniapp+ssm基于java的赈灾系统App救灾救助捐赠

《[含文档PPT源码等]精品基于Uniappssm基于java的赈灾系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框架&#xff…

【LeetCode每日一题】2865. 美丽塔 I

2024-1-24 文章目录 [2865. 美丽塔 I](https://leetcode.cn/problems/beautiful-towers-i/) 2865. 美丽塔 I 初始化变量 ans 为0&#xff0c;用于记录最大的和值。获取整数列表的长度&#xff0c;保存到变量 n 中。使用一个循环遍历列表中的每个位置&#xff0c;从0到n-1。在循…

交换机跨VLAN交换数据ip跳转分析(不一定对)

在网上看到这样一个实验&#xff1a; 交换机1、交换机2分别连接到一台防火墙上&#xff0c;要求使VLAN 2、VLAN3、VLAN5、VLAN6中的终端可互相访问。 拓补 参考链接 【数通网络交换基础梳理2】三层设备、网关、ARP表、VLAN、路由表及跨网段路由下一跳转发原理_网管型交的机…

一文详解:信息化时代,企业如何进行维护客户关系?

信息化时代&#xff0c;企业如何进行维护客户关系&#xff1f;有什么具体的方法&#xff1f; 以市场为导向&#xff0c;就是以客户为导向&#xff0c;抓住了客户&#xff0c;就抓住了市场&#xff0c;顺应了客户&#xff0c;也就顺应了市场。 在信息化快速发展的今天&#xff0…

JVM/GC复习

JVM/GC JVM(java虚拟机)MATjstack(将正在运行的JVM的线程进行快照并且打印出来)死锁VisualVM工具(监控线程内存使用情况)JMX GC垃圾回收算法1.引用计数法2.标记清除发3.标记压缩算法4.复制算法5.分代算法 收集器1.串行垃圾收集器2.并行垃圾收集器2.CMS垃圾收集器 3.G1垃圾收集器…

使用 LinkAi 打造自己的知识库和数字人

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、LinkAi 介绍 二、文档库 2.1 创建知识库 2.2 配置知识库 2.3 Ai配置 2.4 导入文档 2.5 接入微信 三、扩展 四、总结…

ITSS服务工程师:开启IT职业生涯的金钥匙

&#x1f525;ITSS是中国电子技术标准化研究院推出的&#xff0c;涵盖了“IT服务工程师”和“IT服务经理”的系列培训。它不仅满足GB/T 28827.1的符合性评估要求&#xff0c;还助力IT服务资质升级。 &#x1f3af;“IT服务工程师”培训从服务技术、服务技巧和服务规范三大板块&…

Device Monitoring Studio 串口监控 使用方法

选择串口 添加监控指令 正常监控 调整 监控数据接收的时间和数据量

【RT-DETR有效改进】轻量化ConvNeXtV2全卷积掩码自编码器网络

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

Flink Checkpoint 超时问题和解决办法

第一种、计算量大&#xff0c;CPU密集性&#xff0c;导致TM内线程一直在processElement&#xff0c;而没有时间做CP【过滤掉部分数据&#xff1b;增大并行度】 代表性作业为算法指标-用户偏好的计算&#xff0c;需要对用户在商城的曝光、点击、订单、出价、上下滑等所有事件进…

python-自动篇-运维-根据计算机硬盘、主板、CPU生成注册信息

文章目录 准备代码效果 准备 本实例需要使用WMI模块&#xff0c;所以需要安装WMI模块。在安装WMI模块之前&#xff0c;先要安装pywin32模块&#xff0c;WMI模块需要win32api的支持。使用pip安装pywin32模块和WMI模块的代码如下&#xff1a; pip install win32com pip install …

多元跨界、戮力谐老!2024深圳国际户外运动展览会再创运动生活新方式

COSP Shenzhen 2024国际户外运动用品与时尚展 2024年3.14-16日 深圳会展中心(福田馆&#xff09; COSP Shanghai 2024国际户外运动用品与时尚展 2024年9.05-07日 上海世博展览馆&#xff08;浦东&#xff09; 展会概述&#xff1a; 作为国内最具影响力的户外运动展会之一…

《WebKit 技术内幕》学习之七(2): 渲染基础

2 网页层次和RenderLayer树 2.1 层次和RenderLayer对象 前面章节介绍了网页的层次结构&#xff0c;也就是说网页是可以分层的&#xff0c;这有两点原因&#xff0c;一是为了方便网页开发者开发网页并设置网页的层次&#xff0c;二是为了WebKit处理上的便利&#xff0c;也就是…

山海鲸可视化智慧林业解决方案

作为山海鲸可视化的核心开发团队成员&#xff0c;在钻研为大家做出免费好用数字孪生产品的路上孜孜不倦&#xff0c;同时为了提高大家的应用效率&#xff0c;为各行业可视化提供思路&#xff0c;我们也在配合推出各行解决方案案例。今天&#xff0c;为大家介绍我们的林业数字孪…

激活微软Office

1、在这里下载office tool plus&#xff0c;https://otp.landian.vip/zh-cn/ 2、清除掉之前的激活信息 3、按下快捷键 Ctrl Shift P&#xff0c;打开命令框&#xff0c;复制下面的命令执行 ospp /inslicid MondoVolume /sethst:kms.loli.beer /setprt:1688 /act 4、激活成…

Linux本地部署MeterSphere测试平台并实现公网远程访问

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

答案之书程序改良版本

答案之书程序改良版本 C#代码实现 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace …

架构师之路(十四)计算机网络(网络层)

前置知识&#xff08;了解&#xff09;&#xff1a;计算机基础。 作为架构师&#xff0c;我们所设计的系统很少为单机系统&#xff0c;因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 网络层提供主机…

45. 跳跃游戏 II - 力扣(LeetCode)

题目描述 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 题目示例 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标…

算法基础之树状数组

文章目录 树状数组 树状数组 树状数组能解决的最关键的问题就是能够 O ( log ⁡ n ) O(\log n) O(logn)内&#xff0c;给某个位置上的数&#xff0c;加上一个数&#xff0c;或者求前缀和 他和前缀和数组的区别就是&#xff0c;树状数组支持修改原数组的内容&#xff0c;而前缀…