将WPF UI单元复制到“.NET研究”剪贴板

  大家在日常工作中应该遇到过这样的问题:需要对应用程序界面进行截屏操作,然后将截屏内容拷贝到其他文档中使用。通常情况下我们会使用一些截屏软件或者“Ctrl+PrtSc ”,本篇将介绍如何在WPF 程序中将UI 单元直接以图片形式复制到剪贴板,以达到为应用程序界面制作快照(Snapshot)的功能。

  以我之前做过的一个“WPF 员工卡”的文章为例。首先,要为程序添加一个自定义命令(Command):CopyUI。该命令的快捷键方式为“上海网站建设Ctrl+U”,在命令中定义两种事件CanExecute、Executed。关于自定义命令可以参考这里

<Window.Resources>    <Storyboard x:Key="flashClose">        ... ...    </Storyboard>    <RoutedUICommand x:Key="CopyUI" Text="Copy WPF UI as Image" /></Window.Resources><Window.InputBindings上海闵行企业网站制作span>>    <KeyBinding Mo上海闵行企业网站设计与制作difiers="Ctrl" Key="U" 上海企业网站设计与制作span style="color: red;">Command="{StaticResource CopyUI}"/></Window.InputBindings><Window.CommandBindings>    <CommandBinding Command="{StaticResource CopyUI}"CanExecute="CommandBinding_CanExecute"Executed="CommandBinding_Executed"/></Window.CommandBindings>

  完成命令的定义后,就可以为它们添油加醋了。

private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e){    e.CanExecute = true;}

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e){    CopyUIElementToClipboard(this.empCard);}

  到这里有些朋友可能已经发现CommandBinding_Executed 事件里CopyUIElementToClipboard 方法才是关键部分。empCard 是员工卡整体UI 结构。通过CopyUIElementToClipboard 将WPF UI 单元绘制成图片并复制到剪贴板中,如下代码:

public static void CopyUIElementToClipboard(FrameworkElement ui){double width = ui.ActualWidth;double height = ui.ActualHeight;RenderTargetBitmap bmp = new RenderTargetBitmap((int)Math.Round(width),         (int)Math.Round(height), 96, 96, PixelFormats.Default);DrawingVisual dv = new DrawingVisual();using (DrawingContext dc = dv.RenderOpen())    {VisualBrush vb = new VisualBrush(ui);        dc.DrawRectangle(vb, null, new Rect(上海企业网站制作le="color: blue;">new Point(), new Size(width, height)));    }    bmp.Render(dv);Clipboard.SetImage(bmp);}

  接下来运行程序,按“Ctrl+U” 对UI 进行复制。

  “Ctrl+V” 到Word 后的效果,这样就可以比较方便的复制UI 结构,当然也可以复制程序中生成的柱状图,放到PPT中做为报告使用。

时间: 2024-09-20 09:02:59

将WPF UI单元复制到“.NET研究”剪贴板的相关文章

将WPF UI单元复制到剪贴板

大家在日常工作中应该遇到过这样的问题:需要对应用程序界面进行截屏操作,然后将截屏内容拷贝到其他文档中使用.通常情况下我们会使用一些截屏软件或者"Ctrl+PrtSc ",本篇将介绍如何在WPF 程序中将UI 单元直接以图片形式复制到剪贴板,以达到为应用程序界面制作快照(Snapshot)的功能. 以我之前做过的一个"WPF 员工卡"的文章为例.首先,要为程序添加一个自定义命令(Command):CopyUI.该命令的快捷键方式为"Ctrl+U",

一起谈.NET技术,将WPF UI单元复制到剪贴板

大家在日常工作中应该遇到过这样的问题:需要对应用程序界面进行截屏操作,然后将截屏内容拷贝到其他文档中使用.通常情况下我们会使用一些截屏软件或者"Ctrl+PrtSc ",本篇将介绍如何在WPF 程序中将UI 单元直接以图片形式复制到剪贴板,以达到为应用程序界面制作快照(Snapshot)的功能. 以我之前做过的一个"WPF 员工卡"的文章为例.首先,要为程序添加一个自定义命令(Command):CopyUI.该命令的快捷键方式为"Ctrl+U",

wpf 线程-WPF UI线程问题 急急急急急急急急急急急

问题描述 WPF UI线程问题 急急急急急急急急急急急 已经调用UI线程更新操作位什么还出现这个问题啊? propertyManage1.Dispatcher.Invoke(new Action(delegate { propertyManage1.Children.Add(canvas); })); 调用线程无法访问此对象,因为另一个线程拥有该对象

wpf中richtextbox复制图片为什么占一行?怎样让他不占一行?

问题描述 wpf中richtextbox复制图片为什么占一行?怎样让他不占一行? 解决方案

WPF企业内训全程“.NET研究”实录(下)

摘要 WPF企业内训全程实录由于文章比较长,所以一共拆分成了三篇,上篇WPF企业内训全程实录(上)主要讲了基础,中篇WPF企业内训全程实录(中)主要讲解开发模式.团队协作及应用框架,起着承上启下的作用,主要讲解开发模式.团队协作及应用框架.这篇作为该实录的下篇--终结篇,起着总结的作用,主要讲解其他技术的引用.WPF项目及性能优化.部署与更新等议题. 其实如果大家仔细看目录,可以发现我安排的顺序是首先讲解最基本的概念和基础内容.然后过渡到开发模式及框架.最后结合其他技术和项目实际运用,这也是学习

什么是UI设计中的用户研究、交互设计、界面设计

UI的本意是用户界面 ,是英文User interface的缩写.从字面上看用户界面包括 用户.界面这两个组成部分,但实际上还包括用户与界面之间的交互关系,所以用户界面设计 包括用户研究.交互设计.界面设计三个方面. 1.用户研究 用户研究包含两个方面:一是可用性工程学(usability Engineering),研究如何提高产品的可用性,使得系统的设计更容易被人使用.学习和记忆;二是通过可用性工程学的研究,发掘用户的潜在需求,为技术创新提供另外一条思路和方法(consumer insight

精通 WPF UI Virtualization

  本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提升 OEA 框架中 TreeGrid 控件的性能,同时,给出了一些学习 UIV 的资源.     问题     最近对 OEA 的 TreeGrid 控件进行了比较大的改造,并使用新的控件来替换了系统中所有的 DataGrid 控件.新的 TreeGrid 控件实现了很多新的功能,(之后会写一篇文章说明),但是最后遗留了一个问题:由于使用它替换了原来的 DataGrid,而 DataGrid 默认是支持

wpf datagrid 单元格获得焦点后有一圈虚线包围

问题描述 wpf项目,datagrid设置为选择一行,但当点击某行时,被点击的单元格获得焦点并有一个虚线框显示出来,如何去掉这个虚线框 解决方案 解决方案二:winform下应该是这样做的,通过设置datagridview的GridColor属性为Control,如此同时要设置整个窗体的BackColor的属性也为Control,这两个保持一致就可以了,你在wpf下试试行吗?解决方案三:该回复于2011-08-29 09:08:06被版主删除解决方案四:同求帮顶不点击没事一点击就出来虚线边框都快

WPF UI 开源专贴

1.ReactiveUI https://github.com/reactiveui/ReactiveUI http://www.reactiveui.net A MVVM framework that integrates with the Reactive Extensions for .NET to create elegant, testable User Interfaces that run on any mobile or desktop platform. Supports Xa