C# WPF上位机开发(第一个应用)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
万事开头难,很多事情都是难在第一步。走出了这第一步,回过头看以前走的每一步,发现其实也不难。用c# wpf编写界面就是这样。传统的c# form,和delphi、vb、java swing这些开发模式其实差不多,主要就是通过所见即所得方法,借助于编辑软件自动生成图形界面的代码。而c# wpf则是更进了一步,它学习了web开发的先进概念,将图形化和业务逻辑实现了分离。
通俗一点的说,一个windows app可以分成两部分。做也界面的同学可以专注于界面开发。而做业务的同学可以专注于业务开发。两个人的工作都做好之后,合并在一起,就可以实现整个的winapp的运行。当然这是一种理想的情况,但是体现的原理还是比较清楚的,即界面的开发可以通过脚本文件独立进行。
1、创建工程
打开VisualStudio 2017,选择文件-》新建-》项目,在Visual C#中单击“Windows桌面”,选择“WPF应用”即可。

2、生成的文件
项目中生成的文件有一些,但是最重要的还是两个cs文件,以及一个xaml文件。cs文件,也就是项目的源代码文件,主要负责业务的实现,而xaml文件则负责界面的设计。

3、编译和执行
哪怕是默认创建的工程,本省都是可以运行的,直接单击“启动”后,出来的效果是这样的,

4、App.xaml.cs文件
这是整个应用的入口文件。如果有一些需要全局设置的代码,比如配置的加载、日志的写入、数据库的初始化、网络的初始化等等,都可以放在这个位置进行。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;namespace WpfApp
{/// <summary>/// App.xaml 的交互逻辑/// </summary>public partial class App : Application{}
}
5、MainWindow.xaml.cs文件
这是第一个窗口文件。一个winapp本身可能包含了很多的窗口,MainWinow只是第一个窗口。所以说,我们后面如果需要实现不同的窗口,那么每一个窗口除了界面设计文件之外,也会有一个对应的cs文件。此外,窗口里面不同控件的回调函数,也都是在这个cs文件实现的,使用起来十分方便。
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace WpfApp
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}}
}
6、MainWindow.xaml文件
这就是界面设计的地方。界面设计有两种方法,一种方法就是和c# form一样,直接从控件库里面,用鼠标拖进来即可。每一次有新的控件被放到页面当中,那么xaml就会自动添加对应的代码。另外一种方法,我个人认为更加方便,那就是直接编写xaml脚本来进行界面设计。当然,对于控件关联的函数,也是在xaml文件通过Click=“OkButton_Click”这样的方式进行函数关联的。
<Window x:Class="WpfApp.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:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid></Grid>
</Window>
7、尝试添加编写一个登录窗口
为了编写一个登录窗口,我们有必要插入两个label、两个textbox、两个button。选用哪种方式来做,大家可以根据自己的习惯灵活做决定。最终xaml的基本应该是这样的,
<Window x:Class="WpfApp.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:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Label Content="ID" HorizontalAlignment="Left" Margin="275,105,0,0" VerticalAlignment="Top"/><Label Content="Name" HorizontalAlignment="Left" Margin="277,189,0,0" VerticalAlignment="Top"/><TextBox HorizontalAlignment="Left" Height="23" Margin="402,105,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120"/><TextBox HorizontalAlignment="Left" Height="23" Margin="402,191,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120"/><Button Content="OK" HorizontalAlignment="Left" Margin="257,272,0,0" VerticalAlignment="Top" Width="75"/><Button Content="Cancel" HorizontalAlignment="Left" Margin="437,272,0,0" VerticalAlignment="Top" Width="75"/></Grid>
</Window>
简单编译一下,不费什么力气,就可以看到这样的界面出来。关于按钮的关联函数怎么添加,我们下次来继续学习。

相关文章:
C# WPF上位机开发(第一个应用)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 万事开头难,很多事情都是难在第一步。走出了这第一步,回过头看以前走的每一步,发现其实也不难。用c# wpf编写界…...
有点迷糊class和初始化参数的用法了
翻阅手册https://www.runoob.com/python3/python3-class.html Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言&…...
如何选择一款安全稳定的跨境浏览器?
选择适合自己的跨境浏览器是进行跨境电商和跨境交流的关键一步。本文将为您介绍如何客观地选择一款安全稳定的跨境浏览器,以便更好地进行跨境业务。 在选择跨境浏览器时,以下几个因素是需要考虑的: 网络速度:跨境业务需要稳定而高…...
SQL Server 数据库,使用函数查询统计信息
4.1 在查询中使用函数 在前面章节已经学习了一些简单的增、删、改、查询的T-SOL.语句,但是为了更方便快捷地完 成大量的任务,SOLServer提供了一些内部函数,可以和SOLServer的SELECT语句联合使用,也可 以与UPDATE和INSERT一起使用&…...
mysql区分大小写吗
mysql在windows下默认是不区分大小写的,在linux下默认是区分大小写的。 所以,为了避免出问题,许多公司的数据库编程规范中明确规定:库名、表名、列名、索引名一律小写,不同单词之间以下划线分割,且控制在3…...
HarmonyOS 开发案例分享:万能卡片也能用来玩游戏
一、前言 作为一名开发爱好者,从大了讲,我学习并进行 HarmonyOS 相关开发是为了能为鸿蒙生态建设尽一份绵薄之力,从小了讲,就是为了自己的兴趣。而万能卡片是一个让我非常感兴趣的东西。 很多时候我跟别人解释什么是万能卡片&…...
Could NOT find resource [logback-test.xml]
修改 之后就可以正常启动了...
11.28 C++作业
提示并输入一个字符串,统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string str;cout << "请输入一个字符串:" <<…...
126. 单词接龙 II
126. 单词接龙 II 需要注意的是,由于要找最短路径,连接 dot 与 lot 之间的边就不可以被记录下来,同理连接 dog 与 log 之间的边也不可以被记录。这是因为经过它们的边一定不会是最短路径。因此在广度优先遍历的时候,需要记录的图…...
SpringBoot+SSM项目实战 苍穹外卖(2)
继续上一节的内容,本节完成新增员工、员工分页查询、启用禁用员工账号、编辑员工、导入分类模块功能代码。 目录 新增员工(完整流程分为以下五个部分)需求分析和设计代码开发功能测试代码完善 (ThreadLocal 线程局部变量)代码提交 员工分页查询代码完善 扩展Spring …...
vue常见优化手段
永远不要过早优化 why?过早优化的代价就是开发时间变长,开发成本增加,它会慢慢的让我们的代码变得不可阅读,难以维护;这些都是优化带来的代价。有句话是这样说的:命运馈赠的礼物,早已在暗中标好…...
vue3通过v-model实现父子组件通信
单一值传递 父组件 <template><div ><h1>v-model实现父子组件通讯</h1><hr><child1 v-model"num"></child1><!-- 上下两个是等价的 --><child1 :modelValue"num" update:modelValue"handle&quo…...
java设计模式学习之【桥接模式】
文章目录 引言桥接模式简介定义与用途:实现方式 使用场景优势与劣势桥接模式在Spring中的应用绘图示例代码地址 引言 想象你正在开发一个图形界面应用程序,需要支持多种不同的窗口操作系统。如果每个系统都需要写一套代码,那将是多么繁琐&am…...
prometheus|云原生|kubernetes内部安装prometheus
架构说明: prometheus是云原生系统内的事实上的监控标准,而kubernetes集群内部自然还是需要就地取材的部署prometheus服务了 那么,prometheus-server部署的方式其实是非常多的,比如,kubesphere集成方式,h…...
利用Python中的Manim进行数学绘画和创作
相信很多同学就算没听过3Blue1Brown,也一定曾看过他们出品的视频,其从独特的视觉角度解说各种数学概念,内容包括线性代数、微积分、神经网络、傅里叶变换以及四元数等晦涩难懂的知识点。例如最火的《线性代数本质》系列视频。 那么这些视频是…...
Uniapp
UniApp是一个强大的跨平台应用开发框架 随着移动互联网的快速发展,跨平台应用开发成为了一个重要的需求。UniApp就是一个能够满足这一需求的强大框架。本文将介绍UniApp的基本概念、优势、使用方法和未来发展。 一、UniApp概述 UniApp是一个基于Vue.js开发的跨平…...
HNU-青蛙与蚊子
【问题描述】 有 n 只青蛙位于坐标轴 OX 上,对于每只青蛙,有两个已知值 xi、ti,表示第 i 只青蛙在坐标的位置(各不相同)以及它的舌头的长度。同样有 m 只蚊子一只接一只的落到坐标轴上,对于每只蚊子&#x…...
【新论文】【模型攻击】DiffAttack 针对基于扩散的对抗性净化的逃避攻击
DiffAttack: Evasion Attacks Against Diffusion-Based Adversarial Purification 作者: Mintong Kang; Dawn Song; Bo Li 链接: http://arxiv.org/pdf/2311.16124v1 备注: Accepted to NeurIPS 2023 摘要: 基于扩散的净化防御利用扩散模型去除对抗样本的精心设计的扰动&#…...
【Redis缓存】RedisTemplate如何获取符合要求的key,批量获取key
RedisTemplate如何获取符合要求的key,批量获取key 一、方法/命令二、数据使用 一、方法/命令 如果使用命令的形式,输入以下命令即可 keys *如果使用RedisTemplate,则方法为 redisTemplate.keys()获取所有符合条件的key。 二、数据使用 redis中缓存了…...
springboot核心原理之@SpringbootApplication
1.SpringbootApplication Configuration标志的类 在spring ioc启动的时候就会加载创建这个类对象 EnableAutoConfiguration 中有两个注解 (1)AutoConfigurationPackage 扫描主程序包(主程序main所在包及其子包) 可以看到这个类 : static c…...
React自定义Hook开发:解锁逻辑复用的终极指南
React自定义Hook开发:解锁逻辑复用的终极指南 【免费下载链接】react-fundamentals Material for my React Fundamentals Workshop 项目地址: https://gitcode.com/gh_mirrors/re/react-fundamentals React自定义Hook是提升组件逻辑复用能力的核心技术&#…...
seo优化服务价格一般是多少_网站快速排名对网站访问量有什么影响
SEO优化服务价格一般是多少_网站快速排名对网站访问量有什么影响 在当前数字化经济的浪潮中,网站的流量和排名直接决定了企业的成功与否。SEO优化服务价格一般是多少?更重要的是,网站快速排名对网站访问量有什么影响呢?这两个问题…...
GHelper硬件控制工具:华硕笔记本性能优化与系统管理完全指南
GHelper硬件控制工具:华硕笔记本性能优化与系统管理完全指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Str…...
【bilibili-downloader】:突破4K画质限制的B站视频下载工具:给视频收藏爱好者的高效解决方案
【bilibili-downloader】:突破4K画质限制的B站视频下载工具:给视频收藏爱好者的高效解决方案 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/…...
告别云端依赖!DeepSeek-R1-Distill-Qwen-1.5B离线运行全攻略
告别云端依赖!DeepSeek-R1-Distill-Qwen-1.5B离线运行全攻略 1. 为什么选择离线运行DeepSeek-R1-Distill-Qwen-1.5B? 在AI应用日益普及的今天,大多数用户仍然依赖云端服务来运行大语言模型。但云端服务存在隐私泄露、网络延迟、使用成本高等…...
用CT001解读Type-C线材设计:为什么只有一个CC灯亮?
拿到POWER-Z CT001测试仪,很多用户第一次测试C to C线材时,都会产生一个疑问:为什么线材明明能正常充电,CT001上却只有一个CC指示灯亮起?另一个CC对应的位置始终不亮,是线材有问题吗? 答案很明确…...
Phi-4-mini-reasoning镜像部署案例:低成本GPU环境下高效推理落地实录
Phi-4-mini-reasoning镜像部署案例:低成本GPU环境下高效推理落地实录 1. 项目背景与模型介绍 Phi-4-mini-reasoning是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员,它特别针对数学…...
一键切换模型:OpenClaw同时管理多个SecGPT-14B实例
一键切换模型:OpenClaw同时管理多个SecGPT-14B实例 1. 为什么需要管理多个模型实例 去年我在搭建本地AI安全分析系统时,遇到了一个典型困境:当SecGPT-14B模型需要版本升级时,整个服务必须停机。更糟的是,有次模型推理…...
SecGPT-14B模型蒸馏:打造轻量级OpenClaw安全助手
SecGPT-14B模型蒸馏:打造轻量级OpenClaw安全助手 1. 为什么需要轻量级安全助手? 去年在为一个金融客户部署自动化安全监控系统时,我遇到了一个典型困境:他们的边缘设备只能提供4GB内存和2核CPU的算力,但SecGPT-14B这…...
基于vue的高校学生党员发展管理系统[vue]-计算机毕业设计源码+LW文档
摘要:本文旨在设计并实现一个基于Vue框架的高校教师教学质量评价系统。该系统充分利用Vue的组件化、响应式等特性,结合后端技术构建一个高效、易用、交互性强的评价平台。系统涵盖系统用户管理、学生评价管理、教师自评管理以及统计分析管理等多个功能模…...
