WPF
文章平均质量分 73
ludewig
这个作者很懒,什么都没留下…
展开
-
WPF随笔(十五)--模板选择器实现控件类型切换
每每尝试,就会有新发现。今天就带来一个根据数据类型动态切换控件类型的示例。1.需求场景描述有这样一个场景,表单里某个字段的数据类型不是固定的,而是由一个可配置的数据结构定义的,数据类型发生变化时,使用的控件类型也是固定的。比如说数据类型是文本,就用TextBox展示;数据类型是枚举时,就用ComboBox展示;当数据类型是时间时,就用DateTimePicker展示;听起来不算发杂,实现起来也没有那么困难。具体思路就是使用WPF的模板选择器来切换不同的控件数据模板。2.实现过程2.1.定义模板选原创 2021-07-19 21:55:53 · 1064 阅读 · 0 评论 -
WPF随笔(十四)--如何在MVVM模式下关闭窗口
离上一篇WPF随笔有多久,再度编码WPF项目就有多久。机缘巧合又接下了一个开发WPF桌面程序的任务,又有机会详细研究之前一直忽略的细节。今天就来谈谈如何在MVVM模式下关闭窗口。什么?关闭窗口还要写代码?点个×不就行了?起初我也是这么想的, 然而实践证明并没有那么简单。1.需求场景描述在主窗口(一般默认是MainWindow)打开子窗口ChildWindow,在子窗口中进行数据的新增或编辑操作,点击自定义的“保存”按钮,在数据保存完成后自动关闭当前子窗口。需求非常简单,如果使用路由事件那将会非原创 2021-07-10 16:56:46 · 4663 阅读 · 1 评论 -
WPF随笔(十三)--MVVM模式下的窗口管理
使用MVVM模式的WPF项目和传统的使用事件驱动模式的WPF在处理逻辑有所不同,即使最简单的打开窗口也有很大差异。1.创建窗口管理类 public static class WindowManager { private static Hashtable _RegisterWindow = new Hashtable(); //注册窗口 p...原创 2020-02-23 12:33:43 · 3610 阅读 · 1 评论 -
WPF随笔(十二)--使用MVVM模式
规模稍大的WPF项目一般会采用MVVM模式,常见的框架有Prism、MvvmLight、Caliburn等。今天就从头开始创建一个使用MVVM模式的WPF项目,对MVVM也能有一个更好的了解。...原创 2020-02-23 11:47:19 · 555 阅读 · 0 评论 -
WPF随笔(十一)--日志输出到界面
项目开发过程写过几个WPF的小工具,在使用过程中就需要把软件运行的情况以日志的形式输出到界面上,这里就把用过的几种方式总结一下。1.直接输出到RichTextBox输出到RichTextBox很简单直接了,代码如下: /// <summary> /// 日志输出 /// </summary> /// &l...原创 2019-11-13 23:38:52 · 9999 阅读 · 0 评论 -
WPF随笔(八)--使用LiveCharts创建散点图
最近遇到一个绘制散点图用来做数据分析的需求,正好最近了解过开源图表控件LiveCharts,刚好拿来试一试。原创 2018-12-03 23:09:00 · 11917 阅读 · 10 评论 -
MQTT学习(二)--使用MQTTNet在WPF框架下搭建MQTT客户端
在上篇文章中利用Apollo创建了MQTT服务端,但仅有一个服务端是没有意义的,只有将服务端和客户端结合起来使用才能发挥MQTT协议的特性,所以本篇的内容是创建MQTT客户端。由于本人对.Net平台相对熟悉,所以将使用MQTTNet类库结合WPF创建一个客户端。1.需求分析MQTT协议的基本特性是使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,同时基于TCP/IP能够提供多种...原创 2018-12-12 14:11:08 · 5283 阅读 · 6 评论 -
基于OPC自定义接口的OPCClient功能改进
在本人之前的一篇博文中描写了如何使用OPC自定义接口开发OPCClient,并使用SignalR实现数据的远程实时传输。融合SignalR的OPCClient实现环境参数实时监测但是在使用过程中发现仍有不足之处,本文就是对之前OPCClient的功能改进进行说明。1.问题描述原有的OPCClient在测试环境下可以正常运行,但是在实际生产环境下长时间运行后问题就逐渐暴露出来。主要的问...原创 2018-11-28 02:09:10 · 2966 阅读 · 6 评论 -
WPF随笔(七)--分页控件
不管是桌面应用还是Web应用,表单、列表都是大部分应用常见的展现形式,而一个方便易用的分页控件能够很大程度上改善列表的交互体验。本篇就来说明如何用户控件实现一个简单的WPF分页控件。页面结构从展示层面来讲,一个分页控件一般会包括首页、尾页、上一页、下一页以及当前页码等内容,在精细一些可以加上跳转到特定页码、设置每页显示行数等功能。本次的简单分页控件就暂时只包含首页、尾页、上页、下页的功能,...原创 2018-11-18 23:06:38 · 2385 阅读 · 0 评论 -
WPF随笔(九)--使用路径动画模拟管道流体流向
WPF的一大特性就的动画系统,使用动画能够实现很多在WinForm很难实现的效果。最近在网上偶然看到大神用WPF动画实现对象沿特定路径正向或反向移动的效果,就想参考着自己试一试。1.简单路径动画先来一个最简单的路径动画,一个方块加一条线段,让方块从线段起点移动到线段终点。2.反向路径动画在上个示例的基础上,将线段改成多条连续线段甚至加上弧线都不影响效果,小方块都会沿着路径移动下去。对于一...原创 2018-12-15 12:45:08 · 7707 阅读 · 10 评论 -
MQTT学习(五)--使用MQTTNet在WPF框架下创建MQTT服务端(broker)
在前面几篇文章中实践了如何搭建服务端(broker)以及如何在不同类型的应用中实现MQTT客户端,但是回过头来看看,用Apache Apollo搭建的服务端功能固然强大,但无法将其融入到自有业务系统的代码中,尤其是想更加灵活方便的在业务系统中利用MQTT协议的特性时,那么是否能够构建一个自己的MQTTServer呢?今天就来试试用MQTTNet构建一个WPF版的MQTTServer。1.需求...原创 2018-12-17 00:59:48 · 4025 阅读 · 10 评论 -
c#使用HttpListener监听HTTP请求
最近在项目上需要与第三方系统对接,对方会通过HTTP请求定时推送数据,因此需要在项目中添加监听HTTP请求的功能,查阅了相关资料,使用System.Net下的HttpListener实现此功能原创 2019-01-24 16:17:22 · 22279 阅读 · 15 评论 -
WPF随笔(十)--使用AvalonDock实现可停靠式布局
许多软件都使用了可停靠式布局,可以方便的打开、关闭、收起、展开、移动选项卡。今天就来说明如何使用AvalonDock实现这种可停靠式布局。...原创 2019-01-22 22:37:18 · 12256 阅读 · 4 评论 -
如何理解.NET开发中的MVVM模式
虽然网上有很多文章讲解MVVM模式原理及实现,但是毕竟拾人牙慧,学习消化后用自己的语言表达出来才会更深刻的理解。1.MVVM模式的由来1.1.关联知识在谈起MVVM模式时,总会有相关的话题被提起,那就是MVC模式和MVP模式。正如图中和字面意思表示的,MVC、MVP、MVVM这三种设计模式相互联系又有所区分。相同的是,三者都具有M(Model)和V(View)两部分。其中:Vie...原创 2019-02-11 11:48:20 · 3012 阅读 · 0 评论 -
Caliburn.Micro手册(一)--基本配置Basic Configuration
Caliburn.Micro是一套基于XAML的开发框架,采用MVVM模式,适用于WPF、SliverLight等项目开发,是开源项目Caliburn的精简版,体积小巧功能强大。正文内容是针对的官方文档的翻译和和部分注释。原文地址:Basic Configuration打开Visual Studio并创建一个名为“Caliburn.Micro.Hello”的新Silverlight 4...原创 2019-09-05 16:10:00 · 795 阅读 · 0 评论 -
WPF随笔(六)--查看网络图片
现在有一个很简单的需求,在WPF中显示来自于网络的图片,实现过程如下。查看单张网络图片 private void ViewImage(string fileUri) { BitmapImage bitImage = new BitmapImage(); bitImage.BeginInit(); ...原创 2018-11-01 10:59:20 · 2006 阅读 · 0 评论 -
WPF随笔(五)--HttpClient访问第三方WebAPI接口
在WPF 项目中,有时会需要从第三方WebAPI接口获取数据。此时就需要用到位于System.Net.Http命名空间下的HttpClient类,同时为了提高代码复用率,将HttpClient访问API接口的方法做成通用类也是一个不错的想法。设置WebAPI基地址很多时候是需要访问同一站点的不同API接口,因此可以将站点基地址设为公共变量,最好是可以通过配置文件修改。public stati...原创 2018-11-01 10:21:50 · 11286 阅读 · 6 评论 -
WPF应用最小化至系统托盘运行
WPF应用要实现最小化至系统托盘运行需要使用WinForm中的方法。using System.Windows.Forms;namespace ServerApp{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window {原创 2016-06-30 11:24:16 · 4797 阅读 · 0 评论 -
WPF应用开机自启动编程实现
不论是WinForm程序还是WPF程序,实现开机自启动的原理都是向注册表中写值,位置在注册表的“LocalMachine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”目录下。 手动编辑注册表实现应用程序开机自启动请查看下面文章: [如何让应用程序在开机后自动启动?]C#程序实现1.判断注册表键值对是否存在 private bool原创 2016-06-30 11:36:28 · 5941 阅读 · 2 评论 -
WPF+SignalR实现用户列表实时刷新
在实时原创 2016-06-30 14:05:38 · 6253 阅读 · 6 评论 -
SignalR+AForge实现视频会话[WPF]
AForge是基于.NET的强大视频分析库,而SignalR是微软推出的实时通信技术,两者结合起来实现简单的视频会话。预期的效果是实现:在线终端刷新、会话请求、会话接受、会话拒绝、会话繁忙、会话结束。本示例采用USB摄像头。1服务端及辅助类1.1创建服务端 [ 使用WPF创建SignalR服务端]1.2在线终端刷新 [ WPF+SignalR实现用户列表实时刷新]1.3通信状态辅助类原创 2016-06-29 18:17:39 · 4838 阅读 · 5 评论 -
SignalR+NAudio实现语音会话[WPF]
NAudio是一个功能很丰富的.NET语音处理类库,SignalR则微软推出的实时通信框架,结合两者来实现简单的语音会话聊天应用,主要功能包括在线终端列表刷新、会话请求、会话拒绝、会话繁忙、会话结束。和之前写的视频会话示例类似,只不过上个是视频,这个是语音。1 服务端及辅助类1.1 创建服务端 [ 使用WPF创建SignalR服务端]1.2 在线终端列表刷新 [WPF+SignalR实现原创 2016-07-02 17:22:46 · 5842 阅读 · 6 评论 -
WPF实现控件拖动
实现控件拖动的基本原理是对鼠标位置的捕获,同时根据鼠标按键的按下、释放确定控件移动的幅度和时机。 简单示例: 在Grid中有一个Button,通过鼠标事件改编Button的Margin属性,从而改变Button在Grid中的相对位置。<Grid Name="gd"> <Button Width=90 Height=30 Name="btn">button</Button></Grid>原创 2016-07-04 20:57:40 · 12500 阅读 · 5 评论 -
Unity3D应用嵌入WPF应用并实现通信之进阶篇
在之前的一篇博文中描述了Unity3D应用嵌入WPF应用的具体实现方式,但仅仅是解决了最基本的技术问题,想要将其具体的应用到项目中还需要具体的细化。经过近期在项目中的实践进行了细化,现将本人最近的一些过程整理成文,供大家讨论。上篇博文地址如下: Unity3D应用嵌入WPF应用并实现通信问题&需求为什么要将Unity3D应用嵌入WPF应用?Unity3D是近些年比较流行的游戏引擎之一,在三维空原创 2017-07-10 23:48:11 · 13675 阅读 · 8 评论 -
Unity3D应用嵌入WPF应用并实现通信
最近由于项目需要,对Unity3D应用嵌入WPF应用进行了研究,并通过Socket实现了两者的通信。由于Unity3D在5.4.x版本后不再支持WebPlayer,所以并未使用UnityWebPlayer,另外考虑到我们原有的业务系统都是基于WPF的,全部改到Unity3D里面工作量会很大,所以采用了将Unity3D生成的exe可执行程序直接嵌入到WPF中的做法。 我们的设想是WPF程序作为主程序原创 2017-06-08 08:35:33 · 11837 阅读 · 32 评论 -
WPF自定义表格控件(动态添加/删除行)
最近在项目开发中遇到一个小问题,我们的设备管理模块中有一项叫做“技术参数”,具体来说就是不同的设备具有不同的属性,而且属性的数量也不同。举个例子,桌子有长、宽、高、材质四个属性,日光灯有安装高度、额定功率两个属性。我们希望根据设备类型能够自主添加/修改/删除属性,另一方面其他模块也会用到此功能,所以考虑做一个自定义控件,将增、删、改操作封装在控件内部,数据对外开放。 环境 版本 操作系统原创 2017-06-10 17:00:44 · 23662 阅读 · 1 评论 -
WPF简单导航框架(Window与Page互相调用)
使用Frame的通用导航框架,可以从Page页中调用MainWindow中的公共方法和公共变量。原创 2016-09-27 00:30:11 · 51928 阅读 · 14 评论 -
WPF随笔(一)--UI框架MahApps.Metro的使用
WPF随笔(一)--UI框架MahApps.Metro的使用写在前面WPF的界面特性如何使用MahApps.Metro如何使用MahApps.Metro模板后记写在前面使用WPF开发窗体程序有段时间了,这个随笔系列将会记录本人在WPF使用过程中的点点滴滴。WPF的界面特性相比较WinForm而言,WPF的界面呈现使用了基于标签的XMAL文件,具备更好的结构化、层次化特性,可以实现很多有趣的...原创 2018-10-29 23:24:34 · 30330 阅读 · 3 评论 -
WPF随笔(二)--带CheckBox的TreeView
在上一篇的文章中记录了如何使用MahApps.Metro界面库,本人还是比较喜欢它简约现代的风格,但是却发现MahApps.Metro中没有带CheckBox的TreeView,于是就参考资料做了一个带复选框的树形图。树形图TreeView的特点是可以不断循环嵌套下去,如果只有固定的两级或三级并没有太大意义,因此其对应的数据结构应该也是要可循环嵌套的。同时一个通用的树形图的每个节点应该能够支持...原创 2018-10-30 00:36:11 · 3141 阅读 · 1 评论 -
WPF随笔(三)--绘制可拖拽的线段
最近在项目中有这样一个需求,在界面上添加一条线段,可以拖拽移动两个端点来改变线段位置。对于这种需求,考虑采用自定义控件来做。界面结构这个控件的界面结构可以分解为一个画板、一条线段和两个端点,端点用于拖拽移动,线段用于连接端点,画板用于盛放端点和线段。由于在实际使用时,需要线段有一定的宽度,所以两个端点都是有一定的宽高,线段本身更像是长方形。&lt;UserControl x:Class="W...原创 2018-10-30 01:35:49 · 4826 阅读 · 8 评论 -
WPF随笔(四)--窗口多屏显示及全屏
当有多台显示设备,比如有两台显示器时,让WPF窗体在不同显示器上呈现不同内容就显得尤为必要。同时让窗口全屏显示也能取得较好的呈现效果。一般来讲WPF项目默认都是从MainWindow开始启动的。多屏显示的思路很简单,就是遍历当前所有硬件显示设备,然后实例化不同的窗体并分别设置其位置在不同的显示设备上。遍历显示设备 public MainWindow(string sysName...原创 2018-11-01 09:56:01 · 10982 阅读 · 0 评论 -
WPF文件上传及下载
WPF文件上传与下载功能 WPF版本与Silverlight版本文件的上传与下载功能有些不同接下来是主要代码: 后台代码: private void buttonedit_DefaultButtonClick(object sender, RoutedEventArgs e) { OpenFileDialog ofld = new OpenFileDialog(); if (ofld.ShowDi转载 2014-05-11 10:34:43 · 4758 阅读 · 0 评论