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

C# WPF上位机开发(动态添加控件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        写图形界面软件的时候,我们经常会遇到一种情况。那就是图形界面上面,显示的控件可能是不定的。有可能多,也有可能少,具体显示多少内容需要根据配置文件而来。这样对我们来说,其实是有点尴尬的。毕竟,大多数场景,软件打开来之后,什么地方配置哪些内容,都是已经确定好的。

        不过没关系,c# wpf也考虑到了这一点,我们可以通过编写代码的方法进行灵活添加和设置。毕竟,在xaml文件留下来的只是一个空的grid界面而已。

1、xaml界面设计

        xaml界面就比较简单,为了显示方便,我们设计了两行。第一行的高度为100,剩下来的空间全部留给第二行。为了放置控件,还特地给这个grid起了一个名字叫mainGrid。

<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="600"><Grid ><Grid.RowDefinitions><RowDefinition Height="100" /><RowDefinition /></Grid.RowDefinitions><Grid  Grid.Row="1" x:Name="mainGrid"><!-- Add your own layout here --></Grid></Grid>
</Window>

2、初始化按钮

        目前这个case只是为了演示如何添加控件。添加的内容比较少,就是一个按钮。首先初始化按钮,设置按钮的属性,分别是content、width和height。同时还给这个按钮配置了一个回调函数。按钮设置好了,再创建一个stack panel,将按钮装在这个stack panel里面。最后,也是最重要的一步,就是把stack panel保存到mainGrid的space里面,这样就实现了整个界面的部分。

        public MainWindow(){InitializeComponent();AddButtonDynamically();}private void AddButtonDynamically(){// 创建一个新的Button控件Button newButton = new Button();// 设置Button的属性newButton.Content = "Click me!";newButton.Width = 100;newButton.Height = 100;// 为Button添加Click事件处理程序newButton.Click += NewButton_Click;// 创建一个StackPanel并将Button添加到其中StackPanel stackPanel = new StackPanel();stackPanel.Children.Add(newButton);// 将StackPanel添加到窗口中的Grid中mainGrid.Children.Add(stackPanel);}

        按钮回调函数如下所示,

        // Click事件处理程序private void NewButton_Click(object sender, RoutedEventArgs e){MessageBox.Show("Button Clicked!");}

3、多线程中更新界面

        除了动态添加空间之外,另外一部分要注意的,就是界面部分和多线程的更新。启动一个线程很简单,不过如果如果在新的线程里面更新界面,这个是需要注意下的。为了说明这个问题,我们更新下界面,

<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="600"><Grid ><Grid.RowDefinitions><RowDefinition Height="100" /><RowDefinition /></Grid.RowDefinitions><Label x:Name="text" Grid.Row="0" Content="0" HorizontalAlignment="Center"></Label><Grid  Grid.Row="1" x:Name="mainGrid"><!-- Add your own layout here --></Grid></Grid>
</Window>

        这个界面和之前的区别就是多了一个Label,放在了row 0当中,命名为text。解析来为了说明多线程,首先我们添加多线程库,

using System.Threading;

        添加完了之后,就可以创建线程,启动线程了。一般每个线程都有对应的线程入口函数,

        public MainWindow(){InitializeComponent();AddButtonDynamically();Thread newThread = new Thread(new ThreadStart(ThreadMethod));newThread.Start();}private void ThreadMethod(){int cnt = 0;while(true){cnt += 1;Dispatcher.Invoke(() =>{// 在UI线程上执行操作(如果需要)text.Content = Convert.ToString(cnt);});Thread.Sleep(1000);}}

        多线程的操作很正常,这里面需要注意的就是text更新的部分。也就是说,如果需要更新界面的内容,最好用Dispatcher.Invoke()的方法来实现。

相关文章:

C# WPF上位机开发(动态添加控件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 写图形界面软件的时候&#xff0c;我们经常会遇到一种情况。那就是图形界面上面&#xff0c;显示的控件可能是不定的。有可能多&#xff0c;也有可…...

MySQL进阶|MySQL中的事务(一)

文章目录 数据库事务MySQL中的存储引擎InnoDB存储引擎架构什么是事务事务的状态总结 数据库事务 MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比方我想要删除一个用户&#xff08;销户&#xff09;以及这个用户的个人信息、订单信息以及其他信息&#xff0c;这…...

设计模式策略模式讲解和代码示例

引言 策略是一种行为设计模式, 它将一组行为转换为对象, 并使其在原始上下文对象内部能够相互替换。 原始对象被称为上下文, 它包含指向策略对象的引用并将执行行为的任务分派给策略对象。 为了改变上下文完成其工作的方式, 其他对象可以使用另一个对象来替换当前链接的策…...

Qt容器QStackedWidget小部件堆栈

# QStackedWidget QStackedWidget是Qt框架中的一个控件,用于在同一区域显示多个子控件,只有一个子控件可见。以下是一些常用的QStackedWidget函数: addWidget(QWidget *widget):向QStackedWidget中添加一个子控件。 insertWidget(int index, QWidget *widget):在指定位置…...

设计模式 简单工厂 工厂方法模式 抽象工厂模式 Spring 工厂 BeanFactory 解析

工厂模式介绍 工厂模式是我们最常用的实例化对象模式了&#xff0c;是用工厂方法代替new操作的一种模式。它是创建型模式。 简单工厂 简单工厂模式是指由一个工厂对象决定创建出哪一种产品类的实例, 但它不属于GOF 23种设计模式 简单工厂适用于工厂类负责创建的对象较少的场景,…...

【Hive_03】单行函数、聚合函数、窗口函数、自定义函数、炸裂函数

1、函数简介2、单行函数2.1 算术运算函数2.2 数值函数2.3 字符串函数&#xff08;1&#xff09;substring 截取字符串&#xff08;2&#xff09;replace 替换&#xff08;3&#xff09;regexp_replace 正则替换&#xff08;4&#xff09;regexp 正则匹配&#xff08;5&#xff…...

RabbitMQ手动应答与持久化

1.SleepUtil线程睡眠工具类 package com.hong.utils;/*** Description: 线程睡眠工具类* Author: hong* Date: 2023-12-16 23:10* Version: 1.0**/ public class SleepUtil {public static void sleep(int second) {try {Thread.sleep(1000*second);} catch (InterruptedExcep…...

java使用枚举类型解决if-else大量堆积

调用代码 import com.example.javaone.kk.MyEnum;public class Gst {public static void main(String[] args) {MyEnum eMyEnum.getById(1);System.out.println(e.getGetSize());} }被调用代码 package com.example.javaone.kk; public enum MyEnum {ENUM1(1,2),ENUM2(2,3),E…...

【数据结构】八大排序之直接插入排序算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 一.直接插入排序简介及思路 直接插入排序(Straight Insertion Sort)是一种简单直观的插入排序算法. 它的基本操作是: 将一个数据插入到已经排好的有序表中,从而得到一个新的,数…...

网络编程『socket套接字 ‖ 简易UDP网络程序』

&#x1f52d;个人主页&#xff1a; 北 海 &#x1f6dc;所属专栏&#xff1a; Linux学习之旅、神奇的网络世界 &#x1f4bb;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f324;️前言&#x1f326;️正文1.预备知识1.1.IP地址1.2.端口号1.3.端口号与进…...

FreeSWITCH rtp endpoint recvonly

查了下rtp.c的源码&#xff0c;远端端口为0就意味着recvonly&#xff0c;但其实不然&#xff0c;调用switch_rtp_new会马上返回失败 经过反复测试&#xff0c;增加下面几行代码之后终于变成了recvonly: tech_pvt->mode RTP_RECVONLY; rtp_flags[SWITCH_RTP_FLAG_AUTOADJ];…...

Hadoop和Spark的区别

Hadoop 表达能力有限。磁盘IO开销大&#xff0c;延迟度高。任务和任务之间的衔接涉及IO开销。前一个任务完成之前其他任务无法完成&#xff0c;难以胜任复杂、多阶段的计算任务。 Spark Spark模型是对Mapreduce模型的改进&#xff0c;可以说没有HDFS、Mapreduce就没有Spark。…...

英文论文降重修改技巧 papergpt

大家好&#xff0c;今天来聊聊英文论文降重修改技巧&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 英文论文降重修改技巧 作为网站编辑&#xff0c;我们经常需要处理大量…...

DevOps搭建(十)-安装Harbor镜像仓库详细步骤

1、下载Harbor 官方地址&#xff1a; https://goharbor.io/ 下载地址&#xff1a; https://github.com/goharbor/harbor/tags 选择文档版本进行下载&#xff0c;这里我们选择v2.7.2版本 2、上传到服务器并解压 上传压缩包到服务器后&#xff0c;解压到/usr/local目录下&a…...

DDA 算法

CAD 算法是计算机辅助设计的算法&#xff0c;几何算法是解决几何问题的算法 CAD 算法是指在计算机辅助设计软件中使用的算法&#xff0c;用于实现各种设计和绘图功能&#xff0c;CAD 广泛应用于建筑、机械、电子等领域&#xff0c;可以大大提高设计效率和精度 绘图算法是 CAD…...

天猫数据平台-淘宝天猫数据-天猫销售数据分析:11月天猫平台滑雪运动装备行业销量翻倍!

随着天气变冷、冬季来临&#xff0c;迎来了疫情后的首个滑雪季&#xff0c;加之自冬奥会结束以来&#xff0c;大众参与冰雪运动的热度持续攀升&#xff0c;因此&#xff0c;冰雪运动的需求正集中释放。 根据相关数据显示&#xff0c;11月以来&#xff0c;全国滑雪场门票预订量较…...

使用OpenCV和PIL库读取图片的区别

OpenCV 和 PIL&#xff08;Pillow&#xff09;是两个不同的图像处理库&#xff0c;它们使用不同的数据结构来表示图像。 OpenCV 格式图像&#xff1a; OpenCV 中的图像通常表示为 NumPy 数组。这些数组可以是多维的&#xff0c;例如对于彩色图像&#xff0c;它们是三维数组&am…...

Amazon CodeWhisperer:AI 编程助手

文章作者&#xff1a;prigioni 1. 什么是 Amazon CodeWhisperer&#xff1f; Amazon CodeWhisperer 能够理解以自然语言&#xff08;英语&#xff09;编写的注释&#xff0c;并能实时生成多条代码建议&#xff0c;以此提高开发人员生产力。该服务可以直接在集成开发环境&#…...

Linux 使用 Anaconda+Uwsgi 部署 Django项目和前端项目

一、安装Anaconda 使用Anaconda创建python环境的优点&#xff1a; virtualenv只能创建系统原有的python版本&#xff0c;而不能创建创建任意版本的环境 而Anaconda的虚拟环境中&#xff0c;你可以指定任意现存可使用的python环境&#xff08;包括比原环境版本高的python版本&a…...

分析若依的文件上传处理逻辑

分析若依的文件上传处理逻辑 注&#xff1a;已经从若依框架完成拆分&#xff0c;此处单独分析一下人家精彩的封装&#xff0c;也来理解一下怎么做一个通用的上传接口&#xff01;如有分析的&#xff0c;理解的不透彻的地方&#xff0c;大家多多包含&#xff0c;欢迎批评指正&am…...

3个步骤突破微信小程序渲染瓶颈:pixi-miniprogram的WebGL性能革新实践

3个步骤突破微信小程序渲染瓶颈&#xff1a;pixi-miniprogram的WebGL性能革新实践 【免费下载链接】pixi-miniprogram 一个可运行于微信小程序的PIXI引擎&#xff0c;通过模拟window环境&#xff0c;有些功能小程序无法模拟&#xff0c;就直接修改了PIXI引擎代码&#xff0c;最…...

群晖7.2 Docker小白也能搞定:手把手教你部署WPS Office并绑定自己的域名

群晖7.2 Docker部署WPS Office全攻略&#xff1a;从零搭建专属云端办公平台 在数字化办公时代&#xff0c;拥有一个随时可访问的私有化办公套件不仅能提升团队协作效率&#xff0c;更能确保数据安全。本文将带你一步步在群晖NAS上通过Docker部署WPS Office&#xff0c;并绑定专…...

RCS调度系统:从架构蓝图到智能协同的实战解析

1. RCS调度系统&#xff1a;现代仓储的智能大脑 想象一下&#xff0c;在一个数万平方米的智能仓库里&#xff0c;上百台AGV&#xff08;自动导引车&#xff09;正在同时穿梭。它们有的在搬运货架&#xff0c;有的在分拣包裹&#xff0c;还有的在自动充电。这些AGV既不会撞车&am…...

手把手教你用Cline插件零成本调用AI Ping的GLM-4.7,5分钟搞定一个React组件

5分钟实战&#xff1a;用Cline插件调用GLM-4.7生成React表单组件 最近在帮团队优化一个后台管理系统时&#xff0c;发现表单页面的重复开发消耗了大量时间。直到同事推荐了AI Ping的GLM-4.7模型配合VSCode的Cline插件&#xff0c;才真正体会到AI辅助编程的"开箱即用"…...

GNSS数据处理避坑指南:从CDDIS、IGS等官网下载BSX、DCB文件的保姆级教程

GNSS数据处理避坑指南&#xff1a;从CDDIS、IGS等官网下载BSX、DCB文件的保姆级教程 第一次接触GNSS数据处理时&#xff0c;面对各种数据中心的复杂目录和神秘的文件命名规则&#xff0c;我完全懵了。记得当时为了找一个.BSX文件&#xff0c;整整花了两天时间在不同网站间来回切…...

cool-admin(midway版)后端日志管理:日志聚合与集中式存储终极指南

cool-admin(midway版)后端日志管理&#xff1a;日志聚合与集中式存储终极指南 【免费下载链接】cool-admin-midway &#x1f525; cool-admin(midway版)一个很酷的后台权限管理框架&#xff0c;模块化、插件化、CRUD极速开发&#xff0c;永久开源免费&#xff0c;基于midway.js…...

cool-admin(midway版)数据库索引维护:重建索引与碎片整理

cool-admin(midway版)数据库索引维护&#xff1a;重建索引与碎片整理 【免费下载链接】cool-admin-midway &#x1f525; cool-admin(midway版)一个很酷的后台权限管理框架&#xff0c;模块化、插件化、CRUD极速开发&#xff0c;永久开源免费&#xff0c;基于midway.js 3.x、ty…...

PyTorch 3.0 DDP + torch.compile混合训练面试通关手册:涵盖Graph Break诊断、Shard策略冲突、以及3种反模式现场复现

第一章&#xff1a;PyTorch 3.0 静态图分布式训练面试概览PyTorch 3.0 并非官方发布版本&#xff08;截至2024年&#xff0c;PyTorch最新稳定版为2.3&#xff09;&#xff0c;但“PyTorch 3.0”在面试语境中常被用作一种假设性技术命题&#xff0c;用于考察候选人对静态图编译、…...

Super IO:Blender文件操作效率革命,实现300%工作流提速

Super IO&#xff1a;Blender文件操作效率革命&#xff0c;实现300%工作流提速 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io 在3D设计领域&#xff0c;文件导入导出的繁琐操作常常成…...

Omni-Vision Sanctuary在嵌入式边缘设备上的轻量化部署思考

Omni-Vision Sanctuary在嵌入式边缘设备上的轻量化部署思考 1. 嵌入式视觉的挑战与机遇 在智能摄像头、工业质检设备、无人机等嵌入式场景中&#xff0c;视觉模型的部署一直面临特殊挑战。传统方案要么性能不足&#xff0c;要么功耗过高&#xff0c;难以平衡实时性与能效比。…...