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

WPF创建自定义类和控件及打包成dll引用

WPF创建自定义类和控件及打包成dll引用

  • 一、前言
  • 二、创建自定义类和控件并生成dll文件
    • 2.1创建类库项目
    • 2.2创建自定义类和控件
    • 2.3生成dll文件
  • 三、在其他项目中引用
    • 3.1添加dll文件引用
    • 3.2cs文件中引用命名空间
    • 3.3XAML文件中引用命名空间

一、前言

出于一些代码复用的需求,会将一些常用的基础类及控件放在一个单独项目中,然后打包成dll文件,在其他项目中引用这个dll文件就可以使用这些类和控件,这种做法可以提高编程效率,降低代码量,增强项目的可维护性

二、创建自定义类和控件并生成dll文件

2.1创建类库项目

创建类库项目,在VS2019中选择新建项目,然后选择C#语言、windows平台,在搜索框中输入类库,如下图所示:
在这里插入图片描述
此时会出现多个项目模板供选择,要根据项目的.NET框架而不是根据WPF或WinForms框架进行选择,例如项目的框架是.NET Framework框架,那么就应该选择图中第四个模板:类库(.NET Framework),不能选择第二个模板:WPF类库。

以选择第四个模板为例进行下一步操作,下一步需要选择.NET Framework版本,如下图所示,如果选择的版本高于后续引用dll文件的项目版本,可能会导致报错,所以应选择尽可能低的版本。
在这里插入图片描述

2.2创建自定义类和控件

创建自定义类和控件没有特别需要注意的地方,选中上一节创建的项目名称,鼠标右键选择添加,然后选择类或用户控件即可,如下图所示:
在这里插入图片描述

2.3生成dll文件

选中上一节创建的项目名称,鼠标右键点击生成或重新生成,即在项目文件夹的bin/Debug或bin/Release文件夹下生成与项目同名的dll文件,即为目标dll文件。

三、在其他项目中引用

3.1添加dll文件引用

在其他项目中引用首先需要添加dll文件引用。选中项目的引用,鼠标右键选择添加引用,点击浏览,选择dll文件所在路径,确定,即添加完成。

3.2cs文件中引用命名空间

需要在项目的cs文件中引用命名空间,命名空间与dll项目名同名,例如名为MyClassLibrary,则代码如下;

using MyClassLibrary;  // 引用类库中的命名空间namespace MyProject
{public partial class MainWindow{public MainWindow(){InitializeComponent();}}
}

3.3XAML文件中引用命名空间

当需要在项目中调用自定义控件时,需要在XAML文件中引用命名空间,如果是仅调用自定义类则不需要此步。代码如下:

<Window x:Class="AnotherProject.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:localMy="clr-namespace:MyClassLibrary;assembly=MyClassLibrary" Title="MainWindow" Height="350" Width="525"></Window>

相关文章:

WPF创建自定义类和控件及打包成dll引用

WPF创建自定义类和控件及打包成dll引用 一、前言二、创建自定义类和控件并生成dll文件2.1创建类库项目2.2创建自定义类和控件2.3生成dll文件 三、在其他项目中引用3.1添加dll文件引用3.2cs文件中引用命名空间3.3XAML文件中引用命名空间 一、前言 出于一些代码复用的需求&#…...

Zookeeper(54)如何使用Zookeeper的命令行工具?

使用 Zookeeper 的命令行工具可以方便地进行各种操作&#xff0c;如管理节点、查看状态、设置配置信息等。以下是详细的步骤和代码示例&#xff0c;涵盖如何使用 Zookeeper 的命令行工具。 1. 安装和配置 Zookeeper 首先确保已经安装并配置好 Zookeeper。可以在 Zookeeper 的…...

一周学会Flask3 Python Web开发-http响应状态码

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在Flask程序中&#xff0c;客户端发出的请求触发相应的视图函数&#xff0c;获取返回值会作为响应的主体&#xff0c;最后生成…...

【数据挖掘】

数据挖掘 目录&#xff1a;1. 数据转换2. 属性选择3. 独立于方案的选择4. 探索空间5. 具体方案的选择6. 离散化数值属性无监督离散化基于熵的离散化其他离散化方法 k-means算法原理算法步骤优缺点优点缺点 代码示例&#xff08;使用Python和scikit-learn库&#xff09;代码解释…...

位操作符 练习

一、异或&#xff08;^) 参与运算的两个值&#xff0c;如果两个相应bit位相同&#xff0c;则结果为0&#xff0c;否则为1。 即&#xff1a; 0^0 0&#xff0c;1^0 1&#xff0c; 0^1 1&#xff0c;1^1 0 按位异或的3个特点&#xff1a; &#xff08;1&#xff09; 0异…...

解决Python升级导致PySpark任务异常方案

背景 上一篇文章中写了 Linux 多Python版本统一和 PySpark 依赖 python 包方案&#xff0c;但是最近升级 Linux 服务器 上 Python 版本&#xff08;3.6.8 -> 3.7.16&#xff0c;手动编译Python官方的二进制源码&#xff09;之后&#xff0c;发现之前文章提到 python3 -m v…...

Linux中线程创建,线程退出,线程接合

线程的简单了解 之前我们了解过 task_struct 是用于描述进程的核心数据结构。它包含了一个进程的所有重要信息&#xff0c;并且在进程的生命周期内保持更新。我们想要获取进程相关信息往往从这里得到。 在Linux中&#xff0c;线程的实现方式与进程类似&#xff0c;每个线程都…...

机器视觉检测中,2D面阵相机和线扫相机的区别

2D面阵相机和线扫相机是工业视觉系统中常用的两种相机类型&#xff0c;各有其特点和应用场景。 2D面阵相机 特点&#xff1a; 成像方式&#xff1a;通过二维传感器一次性捕捉整个场景的图像。 分辨率&#xff1a;分辨率由传感器的像素数决定&#xff0c;常见的有百万像素到几千…...

LeetCode 热题 100_N 皇后 (62_51_困难_C++)(递归(回溯))

LeetCode 热题 100_N 皇后&#xff08;62_51&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;递归&#xff08;回溯&#xff09;&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;递…...

Winform(C#) 项目保存页面

上一张我们已经实现了TCP和串口页面的数据展示&#xff0c;和保存控件 我们这一章&#xff0c;实现如何去&#xff0c;控制保存。 一、控件展示 CheckBox TextBox Button label Name: checkSaveImage checkDelete txtSaveDays txtSaveImagePath btnSelectIm…...

【LeetCode: LCR 126. 斐波那契数 + 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

OSPF(开放路径最短优先)

ospf优先级&#xff1a;内部优先级默认为10&#xff0c;外部优先级默认为150 1.ospf的三张表 &#xff08;1&#xff09;邻居表 <记录邻居状态和关系> &#xff08;2&#xff09;拓扑表 <链路状态数据库> &#xff08;3&#xff09;路由表 <对链路状态数据库进…...

JAVA EE初阶 - 预备知识(四)

一、API API 即应用程序编程接口&#xff08;Application Programming Interface&#xff09;&#xff0c;是一组定义、协议和工具&#xff0c;用于不同软件组件、应用程序或系统之间进行交互和通信。以下从多个方面详细介绍 API&#xff1a; 基本概念 接口规范&#xff1a;A…...

如何解决服务器端口被攻击:全面防护与快速响应

服务器端口被攻击是网络安全中常见的问题之一&#xff0c;尤其是当服务器暴露在公共网络上时&#xff0c;容易成为黑客的目标。攻击者可能通过扫描开放端口、利用漏洞或发动拒绝服务&#xff08;DoS/DDoS&#xff09;攻击来破坏服务器的正常运行。本文将详细介绍如何检测、防御…...

golang panic原理

数据结构与底层实现 Goroutine结构体 stack&#xff08;栈内存范围&#xff09; 结构体类型&#xff0c;包含 lo&#xff08;低地址&#xff09;和 hi&#xff08;高地址&#xff09;两个 uintptr 字段&#xff0c;描述 Goroutine 的栈内存区间 [lo, hi)。初始栈大小为 2KB&a…...

scratch猜年龄互动小游戏 2024年12月scratch四级真题 中国电子学会 图形化编程 scratch四级真题和答案解析

scratch猜年龄互动小游戏 2024年12月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 老爷爷的年龄是1-100的随机数,老爷爷询问“请猜猜我的年龄是多少?”,输入年龄,老爷爷会回答"大了"或者"小了,直到最后成功猜出年龄。 1、准备工作 (1)删…...

【Elasticsearch】查询规则_query_rules

1.Query Rules 的定义与作用 Query Rules 是 Elasticsearch 提供的一种功能&#xff0c;允许用户根据预定义的规则动态调整搜索结果。它通过匹配查询的元数据&#xff08;如用户输入、地理位置、用户兴趣等&#xff09;&#xff0c;对搜索结果进行定制化调整&#xff0c;例如固…...

Git备忘录(三)

设置用户信息: git config --global user.name “itcast” git config --global user.email “ helloitcast.cn” 查看配置信息 git config --global user.name git config --global user.email $ git init $ git remote add origin gitgitee.com:XXX/avas.git $ git pull or…...

用户的声音 | 文档结构化信息提取方案测评:LLM、开源模型部署与云端API,谁是合适选择?

文档预处理之文本化 近日&#xff0c;我们收到来自专业用户的使用心得&#xff0c;浅析结构化信息提取技术、技术选型及一些个人测试。 结构化信息提取的重要性 数据作为大模型时代的核心生产资料&#xff0c;其结构化处理能力直接影响AI系统的实用价值。尽管知识图谱、RAG等…...

vite调试node_modules下面插件

在使用vite进行开发的时候,我们可能想要修改node_modules中插件的源码.特别是集成一个SDK&#xff0c;需要调试去判断问题时&#xff0c;或者研究第三方源码时后; vite默认是走缓存的&#xff0c;所以当修改后不会看到你打印的日志&#xff0c;这个时候有几种方法可以选择; 方式…...

我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂

我手写了一个 Java 内存数据库&#xff08;二&#xff09;&#xff1a;B 树的插入与分裂 上一篇搭好了节点和查询框架。这篇写 B 树最核心的部分——插入和节点分裂。这块我调了最久&#xff0c;分裂的边界条件特别多。 插入的整体思路 B 树插入分两步&#xff1a; 从根节点一…...

别再手动备份了!GitLab服务器自动备份与清理脚本保姆级教程(CentOS 7.6)

GitLab服务器自动化备份与清理实战指南&#xff1a;解放运维生产力的终极方案 当你的团队已经习惯GitLab带来的高效代码协作时&#xff0c;突然遭遇硬盘故障导致项目历史版本全部丢失的噩梦场景&#xff0c;这种技术债务往往需要整个团队数周时间才能偿还。作为经历过三次数据灾…...

如何让Linux键盘变成钢琴?Keysound键盘音效软件完全指南

如何让Linux键盘变成钢琴&#xff1f;Keysound键盘音效软件完全指南 【免费下载链接】keysound keysound is keyboard sound software for Linux 项目地址: https://gitcode.com/gh_mirrors/ke/keysound 您是否想过让枯燥的键盘打字变得有趣&#xff1f;是否希望在编程时…...

深入浅出RV1126 RKMedia:搞懂VI模块的缓冲区(BufCnt)与工作模式(WorkMode)如何影响视频流性能

深入浅出RV1126 RKMedia&#xff1a;VI模块缓冲区与工作模式的性能优化实战 当你在RV1126平台上使用RKMedia进行视频流处理时&#xff0c;是否遇到过这样的困惑&#xff1a;明明硬件性能足够&#xff0c;却频繁出现丢帧&#xff1f;或者内存占用居高不下&#xff0c;却找不到优…...

AI安全周记:AI驱动攻击占比50%、PQC国标落地、ShinyHunters连环袭击——面对1:25的攻防成本鸿沟,防守方还能撑多久?

当AI驱动网络攻击占比突破50%&#xff0c;当“先窃取、后解密”从理论变为现实&#xff0c;当影子AI将不安全代码扩散率推高300%——这已不是传统的“攻防”&#xff0c;而是一场成本完全不对等的降维打击。引言刚刚过去的一周&#xff0c;网络安全世界再次经历了一场从攻防模式…...

番茄小说下载器终极指南:3分钟打造个人离线图书馆

番茄小说下载器终极指南&#xff1a;3分钟打造个人离线图书馆 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否厌倦了在手机上阅读小说时被广告频繁打断&#xff1f;是否…...

大模型在软件开发中的实践挑战与优化策略

1. 大模型如何改变软件开发的游戏规则去年我在重构一个遗留系统时&#xff0c;第一次尝试用大模型辅助解决代码迁移问题。当时需要将VB6的老旧模块转换为C#&#xff0c;本以为大模型能轻松搞定&#xff0c;结果生成的代码里竟然出现了VB6特有的On Error Resume Next语句——这个…...

多模态大语言模型审计技术AuditDM解析

1. 模型审计技术概述模型审计作为机器学习领域的关键技术&#xff0c;其核心目标是系统性地发现和诊断模型的能力边界与缺陷模式。在视觉问答&#xff08;VQA&#xff09;任务中&#xff0c;传统评估方法通常局限于固定测试集上的聚合性能指标&#xff0c;难以深入揭示模型的具…...

PaperClaw:为科研团队构建AI驱动的知识协作与合成工作流

1. 项目概述&#xff1a;为科研团队构建AI驱动的知识协作层 如果你在实验室或跨机构的科研团队里待过&#xff0c;一定对这样的场景不陌生&#xff1a;新来的博士生面对海量文献无从下手&#xff1b;团队讨论时&#xff0c;大家引用的文献版本不一&#xff0c;甚至结论矛盾&am…...

递归实现C语言菱形图案打印

以下是使用递归函数实现的C语言程序&#xff0c;用于打印菱形图案。程序通过两个递归函数分别处理菱形的上半部分和下半部分&#xff0c;避免了循环结构&#xff1a;#include <stdio.h>// 递归打印空格 void print_spaces(int n) {if (n < 0) return;printf(" &q…...