WPF 跨应用程序域的 UI(Cross AppDomain UI) 发布于 2017-11-12 16:36...更新于 2017-11-13 15:04 为自己写的程序添加插件真的是一个相当常见的功能,然而如果只是简单加载程序集然后去执行程序集中的代码,会让宿主应用程序暴露在非常危险的境地...其特性在于,将宿主和插件隔离在不同的应用程序域中,避免插件对宿主造成不良影响。...虽说主要用于 MAF 插件框架,但其实只需要此类型便可以实现跨应用程序域的 UI。...UI Demo 首先,我们需要有一个支持跨域调用的类型,并有任意的可以用来返回 INativeHandleContract 的方法。
由于 WPF 路由事件(主要是隧道和冒泡)的存在,我们很容易能够通过只监听窗口中的某些事件使得整个窗口中所有控件发生的事件都被监听到。然而,如果我们希望监听的是整个应用程序中所有的事件呢?...路由事件的路由可并不会跨越窗口边界呀? 本文将介绍我编写的应用程序窗口监视器,来监听整个应用程序中所有窗口中的路由事件。这样的方法可以用来无时无刻监视 WPF 程序的各种状态。...更麻烦的是,我们甚至不知道应用程序有哪些窗口,这些窗口都是什么时机显示出来的。...Application 类中有一个属性 Windows,这是一个 WindowCollection 类型的属性,可以用来获取当前已经被 Application 类管理的所有的窗口的集合。...于是,我们只需要遍历 Windows 集合便可以获得应用程序中的所有窗口,然后对每一个窗口监听需要的路由事件。
一个跨平台的ChatGPT悬浮窗工具 使用avalonia实现的ChatGPT的工具,设计成悬浮窗,并且支持插件。 如何实现悬浮窗? 在使用avalonia实现悬浮窗也是非常的简单的。...悬浮窗的效果就达到了。...我们看看执行效果 image-20230702133719931 就这样简单的悬浮窗写好了,我们使用一下悬浮窗的搜索功能 image-20230702133757221 这个就是简单的使用效果,对比其他的工具...,这个悬浮窗更简洁,并且跨平台和开源。...服务会在一个程序集中发现所有的插件类,并且进行注册。 按照上面的方式非常的简单就集成了插件。
改好之后,如果你编译你的 .fx 文件,也就是编写了 HLSL 代码的文件,那么顺便也会生成一份使用 Walterlv.Effects 命名空间的 C# 代码便于你将此特效接入到你的 WPF 应用程序中...预览调节窗格 确保你刚刚使用 F5 编译了你的 HLSL 代码。这样,你就能在这个窗格看到各种预览调节选项。 你可以直接拉动拉杆调节参数范围,也可以直接开启一个动画预览各种值的连续变化效果。...将特效放入到你的 WPF 项目中 我们需要将两个文件加入到你的 WPF 程序中: 一个 .ps 文件,即刚刚的 .fx 文件编译后的像素着色器文件; 一份用于驱动此像素着色器的 C# 代码。...-- 省略了界面上的各种代码 --> 下面是我将 Underwater 特效加入到我的云键盘窗口中,给整个窗口带来的视觉效果。...尝试将特效应用到你的一个 WPF 控件中查看其效果。
其实,WPF的底层也是基于Win32的消息系统,那么对于WPF应用程序来说,它是如何跟Win32的消息交互,这里到底存在一个什么样的机制?...(3)用于UI窗口绘制的可见窗口 (4)用于用户交互的可见窗口 WPF的消息机制(三)-WPF输入事件的来源 WPF的消息机制(四)-WPF中UI的更新 让应用程序动起来 谈到WPF的消息,首先应该知道...首先,我们看一下一个WPF的Application在启动之后都走了哪些逻辑: ?...那么一个Application启动之后,按照以前对Win32的消息机制的理解,当应用程序启动后,必须进入消息循环,对于WPF,也是一样的。那么WPF应用程序是在什么地方进入消息循环呢?...很明显,橙色的部分是一个循环,看起来是不是很眼熟,跟Win32编程碰到的消息循环是否很像?对了,这就是WPF应用程序进入了消息循环。
好多小伙伴说 WPF 的程序有五个窗口,但是我尝试使用了 EnumThreadWindows 去获取的时候居然拿到了 10 多个窗口 在 WPF 内部的5个窗口之 MediaContextNotificationWindow...听说有五个窗口 可以通过 user32 的 EnumThreadWindows 找到一个线程的窗口 delegate bool EnumThreadDelegate(IntPtr hWnd...id 的方法需要先获取进程,在 Loaded 之后尝试获取 WPF 的进程,通过 Process.GetCurrentProcess() 可以拿到当前的进程 通过 process.Threads 可以拿到进程的线程...,于是输入当前的 WPF 的进程,获取一下 private void MainWindow_Loaded(object sender, RoutedEventArgs e)...14 个窗口,但是如果将代码移动到 WPF 的构造函数,会发现只有两个窗口 public MainWindow() { var handleList
上一次我们实现了一个带有命令(Command)的package,这一次让我们更进一步:创建一个被称为工具窗(Tool Window)的界面。那么,什么是工具窗呢?...工具窗自己并不是一个独立的对象,它和我们的package是有联系的:package包含了什么时候和怎样去显示工具窗的逻辑,当然也包含了和工具窗的互动逻辑以及其他服务。...另外,由于一个工具窗可以有一个以上的实例,所以我们必须管理他们。...第一个参数是工具窗的类型,第二个参数定义了工具窗实例的ID。从这个方法的名字上看来,我们猜测它将返回相应工具窗的实例。但是如果我们根本没有创建它,我们又怎能返回一个工具窗的实例呢?...总结 在这个非常简单的package里,我们创建了一个工具窗,当点击工具窗里的按钮的时候,弹出一个消息框。
好多小伙伴说 WPF 的程序有五个窗口,但是我尝试使用了 EnumThreadWindows 去获取的时候居然拿到了 10 多个窗口 在 WPF 内部的5个窗口之 MediaContextNotificationWindow...听说有五个窗口 可以通过 user32 的 EnumThreadWindows 找到一个线程的窗口 delegate bool EnumThreadDelegate(IntPtr hWnd...id 的方法需要先获取进程,在 Loaded 之后尝试获取 WPF 的进程,通过 Process.GetCurrentProcess() 可以拿到当前的进程 通过 process.Threads 可以拿到进程的线程...,封装为一个方法 delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam); [DllImport("user32...,于是输入当前的 WPF 的进程,获取一下 private void MainWindow_Loaded(object sender, RoutedEventArgs e)
因为 WPF 在开启 Pointer 和没有开启的基础表现几乎相同,因此从业务层很难了解到当前是否开启了 Pointer 消息。...本文从开发者的角度,通过 Windows 消息判断当前是否开启 Pointer 支持 在 win10 支持默认把触摸提升 Pointer 消息 告诉大家如何在 Win10 下让 WPF 在 .NET 4.7...和以上框架支持 Pointer 消息 那么如何确定这个 WPF 程序我写对了,开启了 Pointer 消息?...可以通过监听 Window 消息,如果能收到 Pointer 的消息,那么算开启成功 不需要在用户端判断,用户端只需要判断 运行的系统是 Windows 10 Creators Update 1703...因此本文更多是给开发端,开发的时候通过此方法可以确定是否开启了 Pointer 消息 在 WPF 添加窗口消息钩子方法 这篇博客告诉大家如何拿到窗口的消息 在这个基础上,尝试在拿到消息判断是否 Pointer
百叶窗动画是制作PPT时常用的动画之一,本文将通过实现百叶窗动画效果的例子介绍在WPF中如何使用ShaderEffect。...这里使用一个已有的的HLSL文件,也是后边将介绍的一个HLSL编辑器工具Shazzam Shader Editor中的案例。 定义像素着色器,在UI元素中使用像素着色器,并通过动画设置百叶窗动画。...文件,Progress表示百叶窗叶片打开的进度,NumberOfBlinds是百叶窗叶片的数量,Texture2是百叶窗叶片的纹理(通常使用一个纯色的图片)。...但是Shazzam Shader Editor是一个免费的专门为 WPF 实现像素着色器而设计的一款编辑器,使用它来编写像素着色器,可以自动生成WPF中的ShaderEffect。...编译后的文件后缀名是.ps。编辑窗口中可以编辑修改代码,按下F5就可以编译你的HLSL代码,并在界面上方预览效果。编辑器中会高亮关键词和方法,双击不要松开鼠标会弹出相应的提示。
实现一个 WPF 版本的 ConnectedAnimation 2017-12-25 11:44 Windows 10 的创造者更新为开发者们带来了...它的视觉引导性很强,用户能够在它的帮助下迅速定位操作的对象。 不过,这是 UWP,而且还是 Windows 10 Creator’s Update 中才带来的特性,WPF 当然没有。...的管理单元是因为我可以在一个窗口内实现这样的动画,而跨窗口的动画就非常麻烦了。...AdornerLayer 是 WPF 中的概念,用于在其他控件上叠加显示一些 UI,UWP 中没有这样的特性。...事实上,只要是同一个窗口中的两个对象都可以实现。 var animation = service.GetAnimation($"Test{index}"); animation?.
第二个是第一个的子类。 处理翻译好的多语言文件 每种翻译好的语言都是一个ResourceDictionary的文件,对于同一个字符串这N个文件都用同一个key,只是value是不同的翻译。...鼠标位置捕获 可参考:【WPF】DPI对控件定位产生的影响 3. 在win10弹出toast 可参考:【WPF】右下角弹出自定义通知样式(Notification)——简单教程 4....自定义日历控件 可参考:【C#】wpf自定义calendar日期选择控件的样式 5....可参考:【C#】wpf添加gif动图支持 文件设备相关 1....ManagementObject moDisk in mosDisks.Get()) { DasBasicPart disk = GetDisk(moDisk); disks.Add(disk); } } 一个方便的
前言 最近发现有不少小伙伴在学习 WPF,今天大姚给大家分享一个使用 WPF 开发的管理系统,该项目包含了用户登录、人员管理、角色授权、插件管理、职位管理、主页功能(邮件、皮肤、设置)等功能,对于一个...WPF 初学者而言是一个值得参考和学习的项目。...WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。...它提供了灵活的布局、数据绑定、样式和模板、动画效果等功能,让开发者可以创建出吸引人且交互性强的应用程序。 项目技术栈 数据库:MS SQL Server。...项目源码结构 项目运行截图 项目源码地址 更多项目实用功能和特性欢迎前往项目开源地址查看,别忘了给项目一个Star支持。
让我们来剖析一下智能应用程序的结构。 智能应用程序的解剖 在思考如何构建一个智能应用程序时,每个构建块都适用于以下列之一: 计算:智能应用程序计算信息,这转化为行为。...沟通:智能应用程序沟通信息,这是消息传递。 存储:智能应用程序存储信息,这转化为信息状态。 我们可以将这种分类应用到需要构建一个智能应用程序所必需的每个层次的剖析堆栈上。。...为了构建一个智能应用程序,你需要能够连接到事物。这是智能应用解剖的第一层。 这一层是由传感器组成的,并且这些传感器收集并报告与之相关的事物的实际状态,它们是连接在一起的。...模型驱动平台也称为低代码平台,为智能应用程序的协作,可视化开发提供了一个模型驱动的环境。此外,开发团队需要承担软件配置管理以及分支和合并的核心服务工作,并创建构建和应用程序包。...关键外卖 定义一个智能应用程序解剖结构的元素可能会被认为是压倒性的。系统复杂程度的类型和级别将决定需要描述多少元素和服务来创建端到端解决方案。
WindowFormsHost控件工作原理是将WinForms控件作为其子元素添加到WPF的逻辑树中。在运行时,WinForms控件被呈现在WPF窗口中。...1.属性介绍WindowFormsHost是WPF中的一个控件,它可以用来在WPF应用程序中嵌入一个Windows Forms控件。...3.具体案例WindowFormsHost控件用于在WPF的窗口中嵌入WinForms控件,可以方便地在WPF应用程序中使用WinForms控件。...以下是一个简单的案例,展示如何在WPF窗口中嵌入WinForms控件,以及在WinForms控件中使用WPF控件。在Visual Studio中创建一个WPF应用程序。...窗口 winFormsHost.Child = chart;}这个例子中创建一个Pie Chart图表,并将它嵌入到WPF窗口中。
Model由Xceed.Wpf.AvalonDock.Layout命名空间中包含的类表示。...其Layout属性包含由Xceed.Wpf.AvalonDock.Layout命名空间中的类表示的布局组合。...可锚定通常是应用程序控件的容器,可以从其容器窗格(LayoutAnchorablePane)拖出并重新定位到另一个窗格中。.../高度,从它们拖动的内容创建的浮动窗口的初始宽度/高度,以及窗格中的窗格的方向。...“窗格组”类主要用于确定它们包含的窗格的方向。 LayoutRoot表示布局模型的根。DockingManager的Layout属性设置为此类的实例。
使用 WPF 开发一个 Windows 屏幕保护程序 2018-12-22 02:24 最近有小伙伴问我如何可以让 Windows 静置一段时间不操作之后...,显示一个特殊的界面。...---- 屏幕保护程序的本质 屏幕保护程序本质上就是一个 Win32 窗口应用程序。 好了,这一节真的结束了…… ? 编译好一个窗口应用程序之后,把扩展名改为 scr,于是你的屏幕保护程序就做好了。...实际上本应该是 Visual Studio 创建的空 WPF 程序的默认大小。 处理屏幕保护程序参数 我的屏幕保护程序是一个非常简单的程序,几乎就是默认的模板。.../write-a-windows-screen-saver-using-wpf.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
AvalonDock的基本用法 AvalonDock是优秀的开源项目,用于创建可停靠式布局,能够在WPF中方便开发出类似VS2010的软件界面。.../wpf/xaml/avalondock”,便可以在WPF中开发AvalonDock应用程序了。...当一个窗格浮动时,AvalonDock会将其从其所在组中删除,然后放置到FloatingWindows集合中。当一个窗格关闭时,会将其放置在Hidden集合中。...实际的窗格都位于LayoutPanel节点下。 LayoutAnchorablePane:可停靠窗格类,浮动窗格是可停靠控件LayoutAnchorable的容器。一个窗格中,可以有多个可停靠控件。...浮动窗格中的可停靠控件只能是LayoutAnchorable.窗格大小设定后,不能自动改变。
按照MSDN中的解释,当CanExecuteChanged事件发生时,ICommandSource会调用ICommand的CanExecute方法来检测是否可以执行命令。...如果是这样,这里的这个事件名取为:类似“CanExecuteConditionChanged”不是更好吗? ...因为CanExecuteChanged发生,使用者的第一感觉就是CanExecute从false变到true或者由true变到false了。 ...:) 另外,还有一个小问题,MSDN中说到: In the Windows Presentation Foundation (WPF) commanding system, the CommandTarget...虽然我觉得加上也是好的。
领取专属 10元无门槛券
手把手带您无忧上云