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

news2025/4/6 18:12:36

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>

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

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

相关文章

DVWA-DOM型XSS全等级绕过方法

DOM型XSS全等级绕过 前言一、LOW级别二、Medium级别 图片插入语句法 三、High级别 字符 # 绕过服务端过滤 四、Impossible级别 前言 DOM&#xff0c;全称Document Object Model&#xff0c;是一个平台和语言都中立的接口&#xff0c;可以使程序和脚本能够动态访问和更新文档…

《[含文档+PPT+源码等]精品基于Python实现的Django中药材在线学习系统的设计与实现

基于Python实现的Django中药材在线学习系统的设计与实现背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、行业背景 随着中医药在全球范围内的不断推广和普及&#xff0c;中药材的知识普及和在线学习需求日益增长。传统的中药材学习方式往往受限于地域、时间和资…

数组和指针常见笔试题(深度剖析)

strlen和sizeof的区别 strlen是统计\0之前的字符个数&#xff0c;传递的是地址 sizeof是计算类型的字节数&#xff0c;其实在编译期间会通过类型来确定大小 下边我来讲一下常见的面试题&#xff0c;过程很详细放心观看 #include<stdio.h>#include <string.h>int …

网络通信-最大传输单元-MTU,网络安全零基础入门到精通实战教程!

文章目录 MTU 引用MTU 介绍 定义MTU 与 VLAN TagVLAN Tag 处理方式 IP分片可靠传输MTU 之 PMTUD PMTUD介绍IP头的DF分片位 DF 0 可以分片DF 1 不可以分片 注意事项 MTU 引用 以太网最初对报文长度没有限制&#xff0c;网络层最大可以接收65535个字节&#xff0c;但是以太…

在nodejs中使用ElasticSearch(一)安装,使用

使用docker安装ElasticSearch和Kibana 1&#xff09;创建相应的data文件夹和子文件夹用来持久化ElasticSearch和kibana数据 2&#xff09;提前创建好elasticsearch配置文件 data/elasticsearch/config/elasticsearch.yml文件 # Elasticsearch Configuration # # NOTE: Elas…

封装一个vue3控制并行任务数量的组合式函数

一. 使用场景 使用环境&#xff1a; vue3 当需要处理多个异步任务时&#xff0c;想要控制并行异步任务的数量&#xff0c;不想所有任务同时执行导致产生性能上的问题&#xff0c; 比如当需要同时发起多个网络请求&#xff0c;但又不想一次性发出过多请求导致服务器压力过大或…

SpringSecurity请求流转的本质

1. SpringSecurity核心源码分析 分析SpringSecurity的核心原理,那么我们从哪开始分析?以及我们要分析哪些内容? 系统启动的时候SpringSecurity做了哪些事情?第一次请求执行的流程是什么?SpringSecurity中的认证流程是怎么样的?1.1 系统启动 当我们的Web服务启动的时候,…

【AI工具之Deepseek+Kimi一键免费生成PPT】

1.打开Deepseek网页&#xff1a;DeepSeek 2.使用Deepseek获得一份PPT大纲&#xff08;输入背景需求约束条件进行提问&#xff09;如下图&#xff1a; 3.复制Deepseek输出的PPT大纲 4.打开Kimi网页&#xff1a;Kimi.ai - 会推理解析&#xff0c;能深度思考的AI助手 5.在Kimi中…

基于微信小程序的宿舍报修管理系统设计与实现,SpringBoot(15500字)+Vue+毕业论文+指导搭建视频

运行环境 jdkmysqlIntelliJ IDEAmaven3微信开发者工具 项目技术SpringBoothtmlcssjsjqueryvue2uni-app 宿舍报修小程序是一个集中管理宿舍维修请求的在线平台&#xff0c;为学生、维修人员和管理员提供了一个便捷、高效的交互界面。以下是关于这些功能的简单介绍&#xff1a; …

DeepSeek 助力 Vue 开发:打造丝滑的右键菜单(RightClickMenu)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

WLAN无线2.4G/5G频段划分和可用信道

互联网各领域资料分享专区(不定期更新)&#xff1a; Sheet

自己安装一台DeepSeek的服务器

找一台还可以的Linux服务器&#xff0c;登录后执行&#xff1a; curl -fsSL https://ollama.com/install.sh | sh 等待安装完成&#xff1a; 执行命令&#xff0c;根据服务器能力安装不同版本的AI模型&#xff1a; ollama run llama3.2 下一步就开始对话吧&#xff1a; llam…

StableDiffusion学习笔记——4、模型下载和学习

目录   大家好&#xff0c;我是阿赵。   继续学习StableDiffusion的使用。   这次来学习一下模型的相关知识 一、 什么是模型 之前我们了解过&#xff0c;在StableDiffusion里面生成图片或者视频&#xff0c;都需要先选择模型。模型用通俗的话来说&#xff0c;就是决定了…

微软宣布 Windows 11 将不再免费升级:升级需趁早

大家都知道如果你现在是Windows 10 系统&#xff0c;其实可以免费升级到正版 Windows 11&#xff0c;只要你的电脑配置满足 TPM2.0要求。 而最近微软已经公布了 Windows 10 的最后支持时间&#xff0c;也就是今年10月14日&#xff0c;在这之后微软将不再对Windows 10负责&#…

Java开发实习面试笔试题(含答案)

在广州一家中大公司面试&#xff08;BOSS标注是1000-9999人&#xff0c;薪资2-3k&#xff09;&#xff0c;招聘上写着Java开发&#xff0c;基本没有标注前端要求&#xff0c;但是到场知道是前后端分离人不分离。开始先让你做笔试&#xff08;12道问答4道SQL题&#xff09;&…

解析DrugBank数据库数据|Python

一、DrugBank 数据库简介 DrugBank 是一个综合性的生物信息学和化学信息学数据库&#xff0c;专门收录药物和靶点的详细信息。它由加拿大阿尔伯塔大学的 Wishart 研究组 维护&#xff0c;提供化学、药理学、相互作用、代谢、靶点等多方面的药物数据。DrugBank 结合了实验数据和…

专题 - Java Stream API

概述 分类 数据源 任何位置。 如:集合、数组、文件、随机数、 Stream 静态工厂等。 支持的数据类型 整型、长整型、双精度浮点型基本数据类型。引用数据类型。流管道的数据处理流程 流管道必须要有终止操作。否则永不执行,只是一个静默的无操作指令。流管道是懒运算的。当执…

【前端框架】vue2和vue3的区别详细介绍

Vue 3 作为 Vue 2 的迭代版本&#xff0c;在性能、语法、架构设计等多个维度均有显著的变革与优化。以下详细剖析二者的区别&#xff1a; 响应式系统 Vue 2 实现原理&#xff1a;基于 Object.defineProperty() 方法实现响应式。当一个 Vue 实例创建时&#xff0c;Vue 会遍历…

大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)

大模型WebUI&#xff1a;Gradio全解11——使用transformers.agents构建Gradio UI&#xff08;3&#xff09; 前言本篇摘要11. 使用transformers.agents构建Gradio UI11.3 创建和使用工具Tools11.3.1 默认工具箱与load_tool11.3.2 创建新工具11.3.3 管理代理的工具箱toolbox11.3…

路由基础 | 路由引入实验 | 不同路由引入方式存在的问题

注&#xff1a;本文为 “路由基础 | 路由表 | 路由引入” 相关文章合辑。 未整理去重。 路由基本概念 1—— 路由表信息、路由进表以及转发流程、最长掩码匹配原则 静下心来敲木鱼已于 2023-11-26 14:06:22 修改 什么是路由 路由就是指导报文转发的路径信息&#xff0c;可以…