C# 基本桌面编程(一)

news2024/11/19 14:30:32

前言

         学习心得:C# 入门经典第8版书中的第14章《基本桌面编程》,文章的章节和部分介绍是引入书籍上的描述。如想多了解建议大家去购买书籍,进行阅读。

XAML

        XAML是一门使用XAMl语法的语言。XAML允许通过DirectX来使用这些显卡提供所有高级功能。如:

  • 浮点坐标和矢量图形允许在不损失质量的情况下缩放旋转和转换布局 
  • 高级2D和3D渲染功能
  • 高级字体处理和渲染
  • UI对象支持纯色渐变和纹理填充并可选择透明度
  • 可在任何情景中使用的动画分镜头设计包括鼠标单击按钮等用户触发的事件
  • 可使用可重用的资源来动态设置控件的样式

注意:上述的六点均为书中原文

名称空间

名称空间:我们拿我们新建的WPF应用程序,所存在的两个名称空间进行解释。


示例解释:

        红方块所圈出来的名称空间:它为我们声明了许多在创建用户界面时可用到的控件。

        绿方块速圈出来的名称空间:用于声明XAML语言本身  


警告:不要将这些名称空间看成URL其实它们被统称为URI

注意:十分常见的名称空间,系统名称空间

xmlns:s="clr-namespace:System;assembly=mscorlib"

        该名称空间允许在XAML中直接使用.net framework内置的类型。可以显式声明要创建的元素类型。

例如:在标记戳中声明一个数组并且表明数组中的成员是string类型

  <Window.Resources>
      <x:Array x:Key="Localarray" Type="s:String">
          <s:String>LL</s:String>
          <s:String>myLL</s:String>
          <s:String>myLLll</s:String>
      </x:Array>
  </Window.Resources>

使用方式:

<Window
    x:Class="WpfApp1.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:local="clr-namespace:WpfApp1"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:s="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow"
    Width="500"
    Height="500"
    mc:Ignorable="d">
    <Window.Resources>
        <x:Array x:Key="Localarray" Type="s:String">
            <s:String>LL</s:String>
            <s:String>myLL</s:String>
            <s:String>myLLll</s:String>
        </x:Array>

        <s:String x:Key="morenstring">
            hello
        </s:String>

    </Window.Resources>
    <Grid>
        <ComboBox VerticalAlignment="Center" ItemsSource="{StaticResource Localarray}" />
        <Button VerticalAlignment="Bottom" Content="{StaticResource morenstring}" />
        <DataGrid VerticalAlignment="Top" ItemsSource="{StaticResource Localarray}" />
    </Grid>
</Window>

 效果:

代码隐藏文件

代码隐藏文件它就是如下如所示:

 它与XAML文件多了一个CS的扩展名。


注意:1 书中多次提到的GUI其实是 图形用户界面的意思。2 在当我们设计GUI时首选工具是 Blend for Visual Studio ,设计代码时通常设计人员主要使用Visual Studio。

属性

依赖属性

        依赖属性与标准的.net属性完全不同。.net属性都是简单的设置器和获取器。而依赖属性是一种能够注册到WPF属性系统中的属性,我们可以根据依赖属性获得许多功能

  • 可通过样式来更改依赖属性的值
  • 可通过资源或数据绑定来设置依赖属性的值
  • 可通过动画更改依赖属性的值
  • 可设置某个父元素中依赖属性的值将该值也作为子元素中同一个依赖属性的
  • 可通过明确定义的代码模式来配置属性值更改通知
  • 可配置一系列相关属性,其中一个属性值更改后会自动更新其他属性,这种功能称为强制。这样的操作通常称:被更改的属性强制其他属性的值发生更改
  • 可对依赖属性应用元数据,以便指定其他行为特征。例如我们可以指定如果给定的属性值发生变化,就自动调整用户界面 

 上述的功能介,均是书上原文

附加属性

        定义该属性的类实例上的每个子对象上都可以使用的属性。如Grid  中的 Grid.Row="1",被Grid包含的空间都能使用。

事件

        WPF控件生成的事件一种通常与用户操作关联的路由事件其中我们在项目当中使用到的大部分事件都是控件的ol或者这是因为控件本身继承了Control或者contentControl 的基类。其中有一个通用控件事件表格在书中的296页大家可以去看。

处理事件

1 通过鼠标点击创建事件

2  可以自己在控件当中输入事件名 

        你可以在后台代码手动实现事件方法也就是你的事件名。或直接写完事件名后按住F12快捷键系统会自动帮你生成。

路由事件

        可将事件发送到包含该控件所在层次的所有控件当路由事件发生时它会向发生该事件的控件的上层与下层空间传递也就是说如果右键了某个按钮会首先将试卷发给该按钮本身然后发给该按钮的父控件该事件会最终传递给窗口。如果不希望该事件被传往更高的控件层次则需要将RoutedEventArgs 的Handled 属性设为true即可 .(注意注意应该是在后台实现的 )。

举个例子:

        <Button MouseRightButtonDown="Button_MouseRightButtonDown"  />
  private void Button_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
  {
      e.Handled = true;
  }

路由命令

        这个非常好理解:当我们在一个控件上处理一个用户操作时启用事件,即可当我们需要处理多个控件上用户操作这个时候就应该使用命令 。

控件类型

        WPF中有很多控件可供使用,它们分为内容控件和项控件两大类。内容控件例如:Button按钮有一个content属性。可将这个属性设置为其他任意的控件。项控件比如Grid空间就是项控件。

举个例子:

代码:

  <Grid Grid.Row="1">
      <Button HorizontalAlignment="Center" VerticalAlignment="Center">
          <Button.Content>
              <StackPanel Orientation="Horizontal">
                  <Label Content="Hello" />
                  <Button Content="点击" />
              </StackPanel>
          </Button.Content>
      </Button>
  </Grid>

我略过了我觉得不太重要的内容我便没有写在文章当中如果想详细了解可以去看书。

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

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

相关文章

HPM6750系列--总章

本栏目介绍先楫半导体出品的HPM6750芯片&#xff08;基于HPM6750evkmini开发板&#xff09; ​​​​​​​ 内容概述 HPM6750系列--第一篇 初识HPM6750 介绍HPM6750芯片信息&#xff0c;包括主频、内存、外设配置&#xff0c;并列举了各种开发工具和开发资源。 HPM6750系列--…

101基于matlab的极限学习机ELM算法进行遥感图像分类

基于matlab的极限学习机ELM算法进行遥感图像分类&#xff0c;对所获取的遥感图片进行初步分类和最终分类。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 101matlab遥感图像分类模式识别 (xiaohongshu.com)

大数据生态圈kafka在物联网中的应用测试

背景 由物联网项目中使用到了Tbox应用管理车辆&#xff0c;在上报数据的过程中&#xff0c;需要将终端产生的数据通过kafka的produce topic customer对数据进行处理后&#xff0c;放置到mysql中。完成数据二进制到json转换工作。 Kafka的使用 查看kafka的topic ./kafka-topi…

【SpringBoot】从入门到精通的快速开发指南

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《SpringBoot》。&#x1f3af;&#x1f3af; &…

【开源软件】最好的开源软件-2023-第14名 Appsmith

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

解决下载huggingface模型权重无法下载的问题

文章目录 方法一(推荐)方法二方法三依然存在的问题 由于某些原因&#xff0c;huggingface的访问速度奇慢无比&#xff0c;对于一些模型(比如大语言模型LLM)的权重文件动辄几十上百G&#xff0c;如果用默认下载方式&#xff0c;很可能中断&#xff0c;这里推荐几种方式。 方法一…

Qt容器QScrollArea小部件的滚动视图

​# QScrollArea 平台:linux、windows、mac皆可,Qt版本:Qt5.14.2 QScrollArea是Qt框架中用于提供可滚动视图区域的小部件。它通常被用来包含一个较大的内容区域,并且可以在其中嵌入其他小部件。下面是一些常用的QScrollArea函数: 1. `setWidget(QWidget *widget)`: 设置在…

八大排序(插入排序 | 选择排序 | 冒泡排序)

在我们内存中我们一般会有一些没有顺序的数据&#xff0c;我们成为内排序&#xff0c;而今天分享八大排序的是时间复杂度为O&#xff08;N^2&#xff09;的插入排序&#xff0c;选择排序和教学意义比较强的冒泡排序。 插入排序 这是插入排序的动图&#xff0c;通过动图我们也…

pom打包跳过不含main方法的pom工程

Unable to find main class 总pom包已经有打包插件 不包含main方法的工程中的pom配置如下配置 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><con…

KaiwuDB 获评信通院 2023 大数据“星河”标杆案例

12月6日&#xff0c;由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会(CCSA TC601) 共同组织的 2023 大数据“星河(Galaxy)”案例评选结果正式公示&#xff0c;“基于 KaiwuDB 的台区云储能示范项目”历经多环节严苛评审&#xff0c;从累计 706 份申报项目中…

JVM虚拟机系统性学习-JVM调优实战之内存溢出、高并发场景调优

调优实战-内存溢出的定位与分析 首先&#xff0c;对于以下代码如果造成内存溢出该如何进行定位呢&#xff1f;通过 jmap 与 MAT 工具进行定位分析 代码如下&#xff1a; public class TestJvmOutOfMemory {public static void main(String[] args) {List<Object> list…

如何快速制作一个属于自己的网站

在现在这个数字化的时代&#xff0c;有一个属于自己的网站逐渐的成为了展示自己或企业形象、推广产品和服务的重要手段之一。对于小白来说制作一个网站可能听起来很复杂和困难&#xff0c;但其实实际上随着技术的发展和各种网站建设工具的出现&#xff0c;制作一个属于自己的网…

C语言——模拟strcpy函数

代码实现&#xff1a; #include<stdio.h>void mystrcpy(char *des,char *src) {int i0;while(src[i]!\0){des[i]src[i];i;}des[i]\0;//也可以用下面的方法//while(*src!\0)//{// *des*src;// des;// src;//}//*des\0;//或者下面方法//while(*des *src)//{// …

linux应用层编程问题--沙雕问题

1.调用沁恒 USB读取接口 读不到数据 static bool CH37XASyncReadData(int iIndex, uint32_t epindex, void *oBuffer, uint32_t *ioLength) {struct _bulkUp {uint32_t len;uint8_t epindex;uint8_t data[0];} __attribute__((packed));struct _bulkUp *bulkUp;int retval;bul…

计算机毕业设计 基于SpringBoot的日常办公用品直售推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

MES管理系统执行过程中的动态批次管理

MES生产管理系统是现代制造业中非常重要的生产管理工具&#xff0c;它能够有效地协调和监控生产过程。在MES管理系统中&#xff0c;动态批次管理技术发挥着关键作用&#xff0c;对于提高生产效率和质量具有重要意义。本文将详细介绍MES管理系统中的动态批次管理技术及其在生产过…

【教3妹学编程-算法题】反转二叉树的奇数层

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 3妹&#xff1a;“你不是真正的快乐&#xff0c; 你的…

正则表达式:简化模式匹配的利器

正则表达式&#xff1a;简化模式匹配的利器 一、正则表达式简介1.1 正则表达式介绍1.2 正则表达式使用场景 二、正则表达式语法2.1 正则表达式元字符和特性2.2 正则表达式常用匹配 三、正则表达式实战3.1 常见的正则表达式用法3.2 正则表达式的过滤用法3.3 正则表达式的代码用法…

Python移动未标注的图片数据集

Python移动未标注的图片数据集 前言前提条件相关介绍实验环境Python移动未标注的图片数据集情况一&#xff1a;有图&#xff0c;无标注文件代码实现输出结果 情况二&#xff1a;有图&#xff0c;有标注文件&#xff0c;但标注信息为空代码实现输出结果 情况一与情况二同时都考虑…

input、el-input输入框输入规则

一、input 只能输入框只能输入正整数&#xff0c;输入同时禁止了以0开始的数字输入&#xff0c;防止被转化为其他进制的数值。 <!-- 不能输入零时--> <input typetext οninput"valuevalue.replace(/^(0)|[^\d]/g,)"><!-- 能输入零时--> <inp…