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

  大家在日常工作中应该遇到过这样的问题:需要对应用程序界面进行截屏操作,然后将截屏内容拷贝到其他文档中使用。通常情况下我们会使用一些截屏软件或者“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>    <KeyBinding Modifiers="Ctrl" Key="U" 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(new Point(), new Size(width, height)));    }    bmp.Render(dv);Clipboard.SetImage(bmp);}

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

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

时间: 2024-09-20 02:43:58

一起谈.NET技术,将WPF UI单元复制到剪贴板的相关文章

将WPF UI单元复制到剪贴板

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

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

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

一起谈.NET技术,WPF企业内训全程实录(上)

一. 摘要 圣殿骑士由于工作和项目需要,所以对一些技术进行了较为深入的研究,之前在整个公司做过一些技术专场的培训,由于每次时间较短且人员较多的关系,没能讲得很透彻.一直都想以文字的形式把这些培训细节写出来,但是发现进度确实很慢,所以先来几篇宏观的讲解,希望能起到"授人与鱼也授人以渔"的效果.今天我们就来分享一下WPF内训之旅,这篇文章以WPF培训为主线,中间贯穿了一些其他技术和使用心得.其他培训专题诸如"OO到设计模式"."WCF基础到企业应用"

一起谈.NET技术,WPF 基础到企业应用系列1——开篇有益

1.开篇前言 关于本人--圣殿骑士刚入住博客园和51CTO写技术博客,目前主要在一家外资企业从事项目管理.技术架构及企业技术培训工作.由于工作和项目需要,所以对一些技术进行了较为深入的研究,之前在整个公司做过一些技术专场的培训,由于每次时间较短且人员较多的关系,没能讲得很透彻,所以挺对不住那些同事的.现在在园子里开一个博客,希望能把所学的微薄知识书写出来,以供大家参考.近期将针对这些培训专场推出"OO到设计模式"."WCF基础到企业应用"."WPF基础到企

一起谈.NET技术,WPF Multi-Touch 开发:惯性效果(Inertia)

从上一篇实例可以发现在图片移动过程中如果将手指移开屏幕则图片会立刻停止,根据这种情况WPF 提供另外一种惯性效果(Inertia).通过它可以使UI 单元移动的更加符合物理特性.更为实际和流畅. 在前面代码的基础上还需要为<Canvas> 增加ManipulationInertiaStarting 事件. <Canvas x:Name="touchPad" Background="Gray" ManipulationStarting="i

一起谈.NET技术,WPF 企业内训全程实录(中)

摘要 WPF企业内训全程实录由于文章比较长,所以一共拆分成了三篇,上篇WPF企业内训全程实录(上)主要讲了基础,这篇作为该实录的中篇,起着承上启下的作用,主要讲解开发模式.团队协作及应用框架.其实如果大家仔细看目录,可以发现我安排的顺序是首先讲解最基本的概念和基础内容.然后过渡到开发模式及框架.最后结合其他技术和项目实际运用,这也是学习并应用一门技术最好的流程.上篇实际上主要有两个侧重点:一则就是理清脉络--历史渊源.概念引入及基本阐述:二则是讲解WPFBasic--主要讲解WPF的每个知识点,

一起谈.NET技术,WPF 基础到企业应用系列3——WPF开发漫谈

1.开篇前言      首先很高兴这个系列能得到大家的关注和支持,基于对大家负责和对自己负责的态度,我会不断努力写好这个系列,分享自己的微薄技术和经验,希望在帮助别人的同时也不断提升自己.由于这篇文章稍多,所以读者花的时间长了一些,也希望大家能够见谅,这个系列以后会每周发三到四篇左右(主要是写一篇差不多要花几晚上,感觉思维比较发散),除了讲WPF技术本身之外,也会讲一些项目具体开发,所以敬请关注.在前两次的文章中我们对WPF有了一个比较全面的认识,那么在本篇文章当中,除了讲一些理论知识外,我们会

一起谈.NET技术,WPF 基础到企业应用系列4——WPF千年轮回

1.开篇前言      首先很高兴这个系列能得到大家的关注和支持,基于对大家负责和对自己负责的态度,我会不断努力写好这个系列,分享自己的微薄技术和经验,希望在帮助别人的同时也不断提升自己.由于这篇文章很多(现已拆分成2篇,今天这篇只是其中之一),一共花了几个个晚上的休息时间才完成,所以读者花的时间长了一些,也希望大家能够见谅,这个系列以后会每周发三到四篇左右(主要是写一篇差不多要花几晚上,感觉思维比较发散),除了讲WPF技术本身之外,也会讲一些项目具体开发,所以敬请关注.     本篇文章取名为

一起谈.NET技术,WPF 基础到企业应用系列2——WPF前世今生

1.开篇前言      很多时候了解一项新技术的历史和趋势往往比这项技术的本身价值还要重要.WPF作为一项新技术(已经三年多了,或者应该叫老技术了),我们都有必要了解它的来龙去脉,尤其是公司的CTO.技术总监.架构师等决策层,因为他们对技术的选型及应用具有决定权.对于开发者来说,了解自己正在从事的这个技术的前世今生,有助于我们更好的认识技术本身的价值,也可以避免我们少走一些弯路(圣殿骑士 就走过很多弯路,所以对此比较感慨).从IT技术发展的这些年可以看出,技术对于各大公司只是竞争的一种手段,而对