当前位置: 首页 > news >正文

工作助手C#研究笔记(5)

通过示例对C#程序的结构逻辑进行研究梳理,虽然通过阅读相关书籍,但是来的效果更慢。一下相关内容可能有误,请谨慎听取。

TaskToDoList-master

1.XAML

“XAML”是WPF中专门用于设计UI的语言,优点是

1.XAML可以设计出专业的UI和动画(好用)

2.XAML不需要专业的编程知识,它简单易学、结构清晰(易学)

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

4.XAML最大的优点:它让UI和逻辑的剥离。XAML是一种单纯的“声明型语言”它只能用来声明一些UI元素、绘制UI和动画,根本无法在其中加入程序逻辑,这就强制地把逻辑代码从UI代码中赶走了,这样UI的元素统统在UI层,逻辑相关的代码统统都在逻辑层,形成了“高内聚-低耦合”的结构,这样的机构前提底层逻辑相同的情况下,可以大改他的UI界面而不会对后端的逻辑代码有影响。

1.1 APP.xaml

在新建WPF的项目后,APP.xaml 是程序的主体,它的作用就是声明程序的进程会是谁,同时指定程序的主窗体是谁。

XAML是一种由XML派生而来的语言,所以很多XML中的概念在XAML是通用的,XAML中使用标签声明元素,标签有两种第一种就是有起始标签<>和终止标签</>,加在<>和</>标签的内XAML代码表示这个标签的内容。如果没有内容,就用第二种标签空标签</>。XAML是一种“声明”式语言,当看见应该标签,就意味着声明了一个对象,对象之间的层级关系要么是并列、要么是包含,全都体现在标签的关系上

 1.2 x名称空间详解

x名称空间的特征(Attribute)

x:Class作用是告诉XAML编译器将XAML标签的编译结果与后台代码中指定的类合并

x:Name的作用是显式地告诉XAML编译器为这个对象声明引用变量。

使用Name 和 x:Name的效果一样,取决于控件是否Name属性,建议直接使用x:Name,代码同意性和可读性更高

x:Key的作用是为资源贴上用于检索的索引


在WPF中几乎每个元素都有自己的Resources属性,这个属性是“Key-Value”式的集合,只要把元素放进这个集合,这个元素就成为资源字典中的一个条目,为了检索到这个条目,就必须为它加上x:Key。

x:Type当我们在XAML中想表达某个数据类型时就需要使用x:Type标记扩展

s:Static是一个很常用的标记扩展,它的功能是在XAML文档中使用数据类型的static成员。因为XAML不能编写逻辑代码,所以使用x:Static访问的static成员一定是数据类型的属性或字段。

 

x:Static说白就是让UI界面的XAML可以调用C#的数据(属性或字段)

1.3 Attribute & Property  特征和属性

以上代码就是WIndow标签的Attribute(特征),其中的Title(标题、窗体展示的标题)、Height、Width是Window对象的Property(属性)。

1.4 XAML语法

XAML是一种声明性语言,XAML编译器会为每个标签创建一个与之对应地对象。对象创建出来后要对它地属性进行必要地初始化才有使用地意义。XAML中为对象属性赋值共有两种语法。

1)使用字符串进行简单赋值

2、使用属性元素(Property Element)进行复杂赋值

 

 能使用字符串赋值就别用啰嗦的属性元素赋值,充分利用默认值,去除默认值。

在.NET事件处理机制中,可以为对象的某个事件指定一个能与该事件匹配的成员函数,当这个事件发生时,.NET运行时会调用这个函数,即表示这个事件的相应和处理。因此我们把这个函数称为“事件处理器”。以Button控件为例:

1.5 控件于布局

WPF中是数据驱动UI,数据是核心,是主动的;UI从属于数据并表达数据、是被动的。WPF把那些能够展示数据、响应用户操作的UI元素称为控件。控件所展示的数据,我们称为控件的“数据内容”控件在响应用户操作后会执行自己的一些方法或以事件的形式通知应用程序,我们称为控件的“行为”或“算法内容”。

可以把控件想象成一个容器,容器里装的东西就是它的内容。控件的内容可以直接是数据也可以是控件。当控件的内容还是控件的时候就形成了控件的嵌套。我们把被嵌套的控件称为子级控件。因为运行控件嵌套,所以WPF的UI会形成一个树形结构。

控件是内存中的对象,控件的内容也是内存中的对象。控件通过自己的某个属性引用着作为其内容的对象,这个属性称为内容属性。“内容属性”是个统称,具体到每种控件上,内容属性都有自己确切的名字,有的叫Content,有的叫Child;有些控件的内容可以时集合,其内容属性有叫Items或Children的。

ContentControl族

  • 均派生自ContentControl类
  • 它们都是控件(Control)
  • 内容属性的名称为Content
  • 只能由单一元素充当其内容

ContentControl族包含的控件

HeaderedContentControl族

  • 它们都派生HeaderedContentControl类,HeaderedContentControl是ContentControl的派生类
  • 它们都是控件,用于显示带标题的数据
  • 除了用于显示主体内容的区域外,控件还具有一个显示标题(Header)的区域
  • 内容属性为Content和Header
  • 无论是Content还是Header都只能容纳一个元素作为其内容。

HeaderedContentControl族包含的控件

Expander

GroupBox

HeaderedContentControl

TabItem

ItemsControl族

  • 均派生自ItemsControl类
  • 他们都是控件,用于显示列表化的数据
  • 内容属性为Items或ItemsSource
  • 每种ItemsControl都对应自己的条目容器

ItemsControl族包含的控件

HeaderedIemsControl族

  • 均派生自HeaderItemsControl类
  • 它们都是控件,用于显示列表化的数据,同时可以显示一个标题。
  • 内容属性为Items、ItemsSource和Header

Decorator类

  • 均派生自Decorator类
  • 起UI装饰作用
  • 内容属性为Child
  • 只能由单一元素充当内容

Decorator族元素

TextBlock和TextBox

它俩的作用就是显示文本。TextBlock显示文本但不能编辑,所以又叫静态文本。TextBox则允许用户编辑其中的内容。

Shape族元素

Shape族元素它们只是简单的视觉元素,不是控件,就是专门用来在UI上绘制图形的一类元素。这类元素没有自己的内容,我们可以使用Fill属性为它们设置填充效果,还可以使用Stroke属性为它们设置边线的效果。

  • 均派生自Shape类
  • 用于2D图形绘制
  • 无内容属性
  • 使用Fill属性设置填充,使用Stroke属性设置边线

Panel族元素

  • 均派生自Panel抽象类
  • 主要功能是控制UI布局
  • 内容属性为Children
  • 内容可以是多个元素,Panel元素将控制它们的布局

Panel族元素

Grid

Grid:网格。可以自定义行和列并通过行列的数值、行高和列宽来调整控件的布局。近似于HTML中的Table。Grid的特点如下:

  • 可以定义任意数量的行和列,非常灵活
  • 行的高度和列的宽度可以使用绝对数值、相对比例或自动调整的方式进行精确设定,并可以设置最大和最小值
  • 内部元素可以设置自己的所在行和列,还可以设置自己纵向跨几行、横向跨几列
  • 可以设置Children元素的对齐方向

Grid可接受地宽度和高度地单位

对于Grid的行高和列宽,我们可以设置三类值

  1. 绝对值:double 数值加单位后缀

  2. 比例值:double数值后加上一个星号(*) --1*可以简写为*

  3. 自动值:字符串Auto

为控件指定行和列遵循以下规则

行和列都是从0开始计数

指定一个控件在某行,就为这个控件的标签添加Grid.Row=“行编号”这样一个特征,若编号为0(即控件处于首行)可以省略不写

指定一个控件在某列,就为此控件添加Grid.Column=“列编号”这样的特征,若编号为0则可以省略不写

若控件需要跨多个行和列,请使用Grid.RowSpan=“行数”和Grid.ColumnSpan="列数"

StackPanel

StackPanel可以把内部元素在纵向或横向上紧凑排列、形成栈式布局,通俗地讲就是把内部元素像垒积木一样。StackPanel使用3个属性来控制内部元素地布局,它们是Orientation、HorizontalAlignment和VerticalAlignment

StackPanel的三个属性

Canvas

Canvas翻译过来就是“画布”,显然在Canvas里布局就像画布上画控件一样。当控件被放置在Canvas里时就会被附加上Canvas.X和Canvas.Y属性

Canvas使用的场合包括:

  • 一经设计基本上不会再有改动的小型布局(如图标)
  • 艺术性比较强的布局
  • 需要大量使用横纵坐标进行绝对点定位的布局
  • 依赖于横纵标的动画

DockPanel

DockPanel内的元素可以通过Left、Top、Right、Buttom四个值来指定元素会指定方向累积,DockPanel还有一个重要的属性,bool类型的LastChildFill,它的默认值是True。当LastChildFill属性值为True时,DockPanel内最后一个元素的DockPanel.Dock属性值会被忽略,这个元素会把DockPanel内部所有剩余控件充满。(这个布局控件的Dock和小编之前学的Dock属性用法差不多)

WrapPanel

WrapPanel内部采用的是流式布局。WrapPanel使用Orientation属性来控制流延伸的方向,WrapPanel会排列尽可能多的控件,排不下的控件将会新起一行一列继续排序

1.6 样式设置

1.设置全局样式

通过在 <Window.Resources>标签下设置button样式,这样所有的button按钮都默认使用该设定的样式

    <Window.Resources><Style TargetType="Button"><!--控件类型--><Setter Property="Background" Value="Red"/><!--设定样式值--><Setter Property="FontSize" Value="20"/><Setter Property="Height" Value="50"/><Setter Property="Width" Value="300"/></Style></Window.Resources><StackPanel><Button  Content="登录"/><Button Content="退出"/><Button Content="忘记密码"/></StackPanel>

 2.设置不同button样式

在使用中,可能不同地方的按钮需要设置不同的属性,可以通过给样式设置标识符的方式,设置button按钮的不同样式

    <Window.Resources><Style x:Key="LoginStyle" TargetType="Button"><!--通过x:Key给该样式添加一个唯一的标识符--><Setter Property="Background" Value="Green"/><Setter Property="FontSize" Value="20"/><Setter Property="Height" Value="50"/><Setter Property="Width" Value="300"/></Style><Style x:Key="QuitStyle" TargetType="Button"><Setter Property="Background" Value="Red"/><Setter Property="FontSize" Value="20"/><Setter Property="Height" Value="50"/><Setter Property="Width" Value="300"/></Style></Window.Resources><StackPanel><Button Style="{StaticResource LoginStyle}" Content="登录"/><!--StaticResource 代表静态资源--><Button Style="{StaticResource QuitStyle}" Content="退出"/><Button Content="忘记密码"/></StackPanel>

3. 抽取相同属性

有时在设置属性的时候,不同按钮的属性虽然不同,但是有部分属性是相同的,可以将这部分相同的属性单独提取出来进行设置。

    <Window.Resources><Style TargetType="Button"><!--基础样式--><Setter Property="Background" Value="WhiteSmoke"/><Setter Property="FontSize" Value="20"/><Setter Property="Margin"  Value="20,10"/></Style><Style x:Key="LoginStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"><!--继承基础的button样式--><Setter Property="Background" Value="Green"/></Style><Style x:Key="QuitStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"><Setter Property="Background" Value="Red"/></Style></Window.Resources><StackPanel><Button Style="{StaticResource LoginStyle}" Content="登录"/><Button Style="{StaticResource QuitStyle}" Content="退出"/><Button Content="忘记密码"/></StackPanel>

2.cs文件

相关文章:

工作助手C#研究笔记(5)

通过示例对C#程序的结构逻辑进行研究梳理&#xff0c;虽然通过阅读相关书籍&#xff0c;但是来的效果更慢。一下相关内容可能有误&#xff0c;请谨慎听取。 TaskToDoList-master 1.XAML “XAML”是WPF中专门用于设计UI的语言&#xff0c;优点是 1.XAML可以设计出专业的UI和…...

【kali靶机之serial】--反序列化漏洞实操

kali靶机配置 【我图片里没有截图的默认配置即可】需要改的地方图片里面都有。 使用kali扫描网关的主机。 扫到一个开放了80端口HTTP协议的主机ip 访问80端口 会看到一个文本页面&#xff0c;翻译一下看是什么意思。。 F12查看cookie&#xff0c;是一个base64编码了的东西 使…...

学习大数据DAY34 面向对象思想深化练习 将从豆瓣爬取的数据置入自己搭建的网站上

目录 查看电影类型的电影列表 添加电影 修改电影 上机练习 13 使用三层架构完善 web 系统 查看电影类型的电影列表 DAL.py 文件 class MovieDAL(DBHelper): def getMovieByTid(self,typeid): sqlf"""select id,title,release_date,score,tname from Mo…...

【开端】通过Java 过滤器灵活配置URL访问权限,并返回403

一、绪论 在JAVA项目系统中&#xff0c;后端给前端提供接口。但是在某些场景我们需要临时控制接口是否能被访问。或关闭某一接口的访问权限。 比如某一接口被攻击了或者某一接口存在漏洞&#xff0c;在系统不关闭的情况下&#xff0c;如何控制系统的访问权限。 二、控制接口访…...

【C++综合项目】——基于Boost库的搜索引擎(手把手讲解,小白一看就会!!)

目录 一、前言 二、项目的相关背景 ⚡什么是Boost库&#xff1f;⚡ ⚡什么是搜索引擎&#xff1f;⚡ ⚡为什么要做Boost搜索引擎&#xff1f;⚡ 二、搜索引擎的宏观原理 三、搜索引擎技术栈和项目环境 四、正排索引 VS 倒排索引 —— 搜索引擎的具体原理 &#x…...

强化阶段《660》和《880》哪本优先级高?

现在8月份了&#xff0c;正是考研数学复习的关键时刻&#xff0c;大家应该正在痛快的刷题&#xff01; 如果你正在做660880&#xff0c;那么这篇笔记值得花五分钟看完&#xff0c;一定会让你刷660和880的质量和速度提高一个层次&#xff01; 首先我们要知道660和880都怎么用&…...

Redis远程字典服务器(2) —— 全局命令

一&#xff0c;使用官方文档 学会使用文档&#xff0c;是一个优秀程序员的必备技能。Redis的命令非常多&#xff08;上百个&#xff09;&#xff0c;因为Redis是通过键值对存储数据的&#xff0c;key为string类型&#xff0c;但是value可以是其它的数据类型&#xff08;字符串…...

Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?

技术背景 我们知道&#xff0c;Android平台不管RTMP推送、轻量级RTSP服务模块还是GB28181设备接入模块&#xff0c;早期&#xff0c;如果需要实现截图功能&#xff0c;又不想依赖Android系统接口&#xff0c;最好的办法是&#xff0c;在底层实现快照截图。 快照截图&#xff…...

tomcat文件上传漏洞练习

1、靶场账号注册 vulfocus 注册后邮箱中点击激活 2、首页选择并开启靶场 复制映射的ip和端口 在浏览器输入ip和端口 改成put并把1.jsp中内容复制进去 3打开哥斯拉&#xff0c;连接上面的网址...

项目实战_图书管理系统(简易版)

你能学到什么 一个简单的项目——图书管理系统&#xff08;浏览器&#xff1a;谷歌&#xff09;基础版我们只做两个功能&#xff08;因为其它的功能涉及的会比较多&#xff0c;索性就放在升级版里了&#xff0c;基础版先入个门&#xff09; 登录: ⽤⼾输⼊账号,密码完成登录功…...

Gazebo之MyRobot建立

Gazebo之MyRobot建立 1. 源由2. 示例Step 1: 新建一个简单世界Step 2: 新建一个模型(model)Step 3: 机器人组成链接(Links)Step 3.1: 新增底盘(Links/Chassis)Step 3.1.1: 惯性属性(Inertial properties)Step 3.1.2: 视觉(Visual)Step 3.1.3: 碰撞(Collision) Step 3.2: 新增左…...

WPF学习(5)- Border控件(边框布局)+GridSplitter分割窗口

严格来说&#xff0c;Border并不是一个布局控件&#xff0c;因为它并不是Panel的子类&#xff0c;而是Decorator装饰器的子类&#xff0c;而Decorator继承于FrameworkElement。我们要先看看它的父类Decorator。 public class Decorator : FrameworkElement, IAddChild {public…...

ADAS芯片及方案

一 ADAS芯片及方案 1.1 高通SA8775P Snapdragon Ride Flex&#xff08;SA8775P&#xff09;舱驾融合平台可通过单颗SoC同时支持数字座舱和智能驾驶功能&#xff0c;在CPU、GPU、NPU的处理能力方面具备强大的性能表现与领先优势&#xff0c;支持实现复杂的智能座舱功能&#x…...

5 mysql 查询语句

1.DML&#xff1a;对数据进行增删改查 提示&#xff1a;Execute执行 Execute and Suppress 执行并且抑制这个警告 person表的结构 /* DML:Data Manipulation Language 数据操作语言&#xff0c;对数据进行 增删改查操作&#xff0c;因为査询的操作太频繁和复杂&#xff0c;将…...

从网络上下载并展示图像数据

一、代码 from PIL import Image import requests from io import BytesIO import matplotlib.pyplot as pltimage_url "https://www.alleycat.org/wp-content/uploads/2019/03/FELV-cat.jpg" response requests.get(image_url) # response.content 获取 HTTP 响…...

Machine-Learning 机器学习

目录 基本概念与分类 工作原理 应用领域 发展趋势 机器学习中的深度学习是如何工作的&#xff0c;以及它如何影响其他机器学习算法&#xff1f; 在机器学习中&#xff0c;哪些特定的数据预处理技术最有效&#xff0c;特别是在处理大规模数据集时&#xff1f; 强化学习在…...

CSP 2023 普及组第一轮 - CSP/S 2023初试题 基础部分解析

第 1 题 在 C 中&#xff0c;下面哪个关键字用于声明一个变量&#xff0c; 其值不能被修改?&#xff08;B) A. unsigned B. const C. static D. mutable 【const声明的变量不可修改】 第 2 题 八进制数 12345670(8) 和 07654321(8) 的和为&#xff08;D&#xff09; A. 222222…...

解锁IPython的跨平台魔法:深入探索%%script命令的神秘力量

IPython 的 %%script 魔法命令是一种强大的工具&#xff0c;它允许你在 IPython 环境中执行外部脚本。这个特性特别适用于需要在 IPython Notebook 中直接与 Web 技术交互的场景。下面我将为你详细介绍 %%script 命令的使用方法&#xff0c;并通过代码示例展示其强大功能。 一…...

如何避免项目发布后用户从浏览器WebPack中看到源码

打包前在config->index.js中设置productionSourceMap为false productionSourceMap: false,...

java学习19VUE

VUE NPM npm的全称是Node Package Manager 中文名为Node.js包管理器&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块(包)的标准。NPM可以方便地从一个全球的代码库中获取并安装Node.js模块&#xff0c;这些模块可以用于构建应用程序、…...

八股---7.JVM

1. JVM组成 1.1 JVM由哪些部分组成?运行流程? 难易程度:☆☆☆ 出现频率:☆☆☆☆ Java Virtual Machine:Java 虚拟机,Java程序的运行环境(java二进制字节码的运行环境)好处:一次编写,到处运行;自动内存管理,垃圾回收机制程序运行之前,需要先通过编译器将…...

JDK8新特性之Steam流

这里写目录标题 一、Stream流概述1.1、传统写法1.2、Stream写法1.3、Stream流操作分类 二、Stream流获取方式2.1、根据Collection获取2.2、通过Stream的of方法 三、Stream常用方法介绍3.1、forEach3.2、count3.3、filter3.4、limit3.5、skip3.6、map3.7、sorted3.8、distinct3.…...

10万QPS高并发请求,如何防止重复下单

1. 前端拦截 首先因为是10万QPS的高并发请求&#xff0c;我们要保护好系统&#xff0c;那就是尽可能减少用户无效请求。 1.1 按钮置灰 很多用户抢票、抢购、抢红包等时候&#xff0c;为了提高抢中的概率&#xff0c;都是疯狂点击按钮。会触发多次请求&#xff0c;导致重复下…...

agent基础概念

agent是什么 我个人认为agent并没有一个所谓完美的定义,它是一个比较活的概念,就像是你眼中的一个机器人你希望它做什么事,和我眼中的机器人它解决事情的流程,其实是可以完全不同的,没有必要非得搞一个统一的概念或流程来概况它。但我们依然可以概况几个通用的词来描述它…...

MySQL 8.0 绿色版安装和配置过程

MySQL作为云计算时代&#xff0c;被广泛使用的一款数据库&#xff0c;他的安装方式有很多种&#xff0c;有yum安装、rpm安装、二进制文件安装&#xff0c;当然也有本文提到的绿色版安装&#xff0c;因绿色版与系统无关&#xff0c;且可快速复制生成&#xff0c;具有较强的优势。…...

软件功能测试报告都包含哪些内容?

软件功能测试报告是软件开发生命周期中的重要文档&#xff0c;主要涵盖以下关键内容&#xff1a;    1.测试概况&#xff1a;概述测试目标、范围和方法&#xff0c;确保读者对测试背景有清晰了解。 2.测试环境&#xff1a;详细描述测试所用的硬件、软件环境&#xff0c;确保…...

智慧充电:新能源汽车智慧充电桩的发展前景受哪些因素影响?

全球能源结构转型与碳中和目标的推进&#xff0c;新能源汽车产业迎来爆发式增长&#xff0c;而智慧充电桩作为其核心基础设施&#xff0c;发展前景备受关注。智慧充电不仅关乎用户充电体验的优化&#xff0c;更是电网平衡、能源效率提升的关键环节。 然而&#xff0c;其发展并…...

【网站建设】不同类型网站如何选择服务器?建站项目实战总结

做了几个建站项目后,深刻体会到一件事:不同类型的网站,所采用的服务器策略是完全不同的。 如果选错了服务器方案,可能带来过高的成本、过低的性能,甚至上线失败。 这篇文章分享一下我在实战中的经验,供正在做建站项目的朋友参考。 🚩 1️⃣ 纯展示型网站 —— 静态服务…...

网络爬虫一课一得

网页爬虫&#xff08;Web Crawler&#xff09;是一种自动化程序&#xff0c;通过模拟人类浏览行为&#xff0c;从互联网上抓取、解析和存储网页数据。其核心作用是高效获取并结构化网络信息&#xff0c;为后续分析和应用提供数据基础。以下是其详细作用和用途方向&#xff1a; …...

零基础在实践中学习网络安全-皮卡丘靶场(第十五期-URL重定向模块)

本期内容和之前的CSRF&#xff0c;File inclusion有联系&#xff0c;复习后可以更好了解 介绍 不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目…...