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

news2024/9/27 15:35:15

通过示例对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文件

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

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

相关文章

c# .Net Core 项目配置SWagger UI 带Token访问

简介 Swagger是一款强大的API管理工具&#xff0c;它主要用于生成、描述、调用和可视化RESTful风格的Web服务。Swagger通过一套标准的规范定义接口及其相关信息&#xff0c;从而能够自动生成各种格式的接口文档&#xff08;如HTML、PDF、Markdown等&#xff09;&#xff0c;并…

知识库、微调、AI Agent

Agent执行工作的过程是需要大模型来配合的&#xff0c;大模型充当一个大脑&#xff0c;给Agent下达指令。Agent当接收到这个指令的时候&#xff0c;然后去执行。 大模型参数的数量直接影响大模型的生成能力和推理能力&#xff0c;也直接影响了大模型的使用效果。参数越多&…

【竞技宝】奥运会:日本U23惨败梦想破裂

奥运会男足8进4的比赛已经全部结束,夺冠热门阿根廷被东道主法国淘汰,埃及点球淘汰巴拉圭,摩洛哥4比0大胜美国,亚洲球迷关心的日本U23竟然惨败西班牙U23,让不少球迷都觉得意外。因为日本U23赛前被普遍看好,可是他们却被西班牙队全面压制,甚至毫无还手之力,这样的结果让球迷们不禁…

【linux】linux中定时任务的巧妙运用,让你轻松解放双手

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

书生·共学计划|训练营又开始啦!

&#x1f970; 在大模型技术的浪潮中&#xff0c;面对混杂的众多信息&#xff0c;如何获取有效、可信的学习资源成为了一项挑战。为此&#xff0c;我们推出“书生共学计划”&#xff0c;鼓励大家将实战营活动分享给你身边有需要的小伙伴&#xff0c;让每一位热爱技术的朋友都能…

无人机培训机构开办投资收益分析

一、引言 随着无人机技术的飞速发展及其在航拍、农业、测绘、物流等多个领域的广泛应用&#xff0c;市场对无人机专业人才的需求急剧增长。因此&#xff0c;开设无人机培训机构成为了一个具有广阔市场前景的投资项目。本报告旨在全面分析无人机培训机构开办的投资收益&#xf…

面向开发者的 LLM 入门教程-笔记和代码

本文是 DLAI 课程 ChatGPT Prompt Engineering for Developers 的笔记。这门课面向入门 LLM 的开发者&#xff0c;深入浅出地介绍了如何构造 Prompt 并基于 OpenAI 提供的 API 实现包括总结、推断、转换等功能&#xff0c;是入门 LLM 开发的经典教程。 Prompt&#xff08;提示…

【BES2500x系列 -- RTX5操作系统】系统执行流程 -- 系统初始化 -- main函数 --(十一)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

OJ-0805

题目 参考 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int L1 scanner.nextInt();int L2 scanner.nextInt();int[] A new int[L1];int[] B new int[L2];fo…

算法回忆录(1)

1.编程求1*2*3*4*……*n的末尾有多少个0。 #include <stdio.h>// 计算 n! 中末尾的0的个数 int count_zeros_in_factorial(int n) {int count 0;for (int i 5; n / i > 1; i * 5) {count n / i;}return count; }int main() {int n;printf("请输入一个整数 n&…

代码随想录day34 || 62不同路径 63不同路径2 343整数拆分

动归5步法 1&#xff0c;确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2&#xff0c;确定递推公式 3&#xff0c;dp数组如何初始化 4&#xff0c;确定遍历顺序 5&#xff0c;举例推导dp数组 62不同路径 力扣题目链接 题目描述&#xff1a; 一个机器人…

免费分享一套SpringBoot+Vue图书(图书借阅)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue图书(图书借阅)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue图书(图书借阅)管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 本论文阐述了一套先进的图书管理系…

分享一个基于Node.js和Vue的游戏点单陪玩系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

MQ面试篇

目录 传送门前言一、MQ优缺点二、MQ消息重复问题处理&#xff08;精品&#xff09;三、保证MQ消息不丢失四 、MQ百万消息持续积压问题五、如果保证MQ的高可用 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff09; SpringB…

山东青岛高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

青岛高校大学智能制造实验室作为高校科研和人才培养的重要基地&#xff0c;一直致力于推动智能制造技术的研发和应用。为了提升实验室在智能制造领域的教学、科研和产业合作能力&#xff0c;实验室决定建设数字孪生可视化系统平台。 智能制造数字孪生项目旨在通过搭建一个全面…

C语言实现希尔排序和堆排序

目录 1.希尔排序 1.1基本思想 1.2希尔排序的特性总结 1.3希尔排序算法的实现 2.堆排序 2.1基本思想 2.2堆排序的特性总结 2.3堆排序算法的实现 1.希尔排序 1.1基本思想 希尔排序法的基本思想是&#xff1a;先选定一个整数(gap)&#xff0c;把待排序文件中所有记录分成…

自定义微信小程序源码系统 带网站的源代码包以及搭建部署教程

系统概述 自定义微信小程序源码系统是一套完整的解决方案&#xff0c;包含了微信小程序的源代码以及配套的网站源代码包。它为开发者提供了一个可定制、可扩展的开发平台&#xff0c;让开发者能够根据自己的需求和创意&#xff0c;快速构建出具有独特风格和功能的微信小程序。…

微力同步如何安装使用并使用内网穿透配置公网地址远程访问

文章目录 1.前言2. 微力同步网站搭建2.1 微力同步下载和安装2.2 微力同步网页测试2.3 内网穿透工具安装 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 私有云盘作为云存储概念的延伸&#xff0c;虽然谈不上多么新颖&#xff0c;但是其广…

CodeWave简介

CodeWave是网易自主研发的领先低代码平台&#xff0c;可快速搭建公司官网、项目管理、OA等各种企业信息化系统&#xff0c;助力企业数字化提质增效。产品特点&#xff1a;低门槛&#xff08;降低软件开发门槛&#xff0c;赋能非专业技术人员专职从事软件开发工作&#xff09;、…

要想赚钱,AI模型该大该小?贾扬清:论AI模型经济学的技巧

卖模型就像感恩节卖火鸡&#xff0c;快才能赚钱。 最近的AI社区&#xff0c;关于模型规模的讨论有些活跃。 一方面&#xff0c;此前在大模型开发奉为“圣经”的Scaling Law&#xff0c;似乎正在褪去光环。去年大家还在猜测GPT-5的规模“可能会大到想不到”&#xff0c;现在这…