WPF实例秀——如何获取UI元素的图像

简介:
WPF实例秀——如何获取UI元素的图像
 
这个标题还真难说明白,我还是再解释一下吧。
 
比如我想在UI上拖拽某个元素,拖拽过程中,我需要让这个UI元素的影相跟着鼠标移动(但UI还停留在原位),当放开鼠标的时候,UI元素移动到新的位置。
 
这是个很常见的需求,实现这个需求的第一步就是获取这个UI元素的影相。实现这一步其实很简单,核心就是使用VisualBrush这个画刷子类。
 
下面我给出一个简单的例子。
 
这是UI描述,
  1. <Window x:Class="WpfApplicationImage.Window1"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.     Title="Window1" Height="300" Width="400" Background="SteelBlue">
  5.     <Grid Margin="10">
  6.         <Grid.ColumnDefinitions>
  7.             <ColumnDefinition Width="160"/>
  8.             <ColumnDefinition Width="*"/>
  9.             <ColumnDefinition Width="160"/>
  10.         </Grid.ColumnDefinitions>
  11.         <StackPanel x:Name="stackPanelLeft" Background="White">
  12.             <Button x:Name="btn" Content="OK" Height="40"/>
  13.         </StackPanel>
  14.         <Button Content=">>>" Grid.Column="1" Margin="5" Click="Button_Click"/>
  15.         <StackPanel x:Name="stackPanelRight" Background="White" Grid.Column="2"/>
  16.     </Grid>
  17. </Window>
UI效果是这样的
 
点击中间的Button,会把左边StackPanel中Button的影像加入到右边的StackPanel中。代码如下(核心是使用VisualBrush):
 
  1.         private void Button_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             VisualBrush vbrush = new VisualBrush(btn);
  4.             Rectangle rect = new Rectangle();
  5.             rect.Width = btn.Width;
  6.             rect.Height = btn.Height;
  7.             rect.Fill = vbrush;
  8.             rect.Opacity = 0.5; //为了表示是影像,我让不透明度为50%
  9.             this.stackPanelRight.Children.Add(rect);
  10.         }
点击几下后,结果如下图:
 
核心问题解决了,剩下的就好办了。如果想做出拖拽等效果,只是些使用Mouse事件和计算偏移量的小技俩了:p
====================================
我写了一个完整的例子,上传到资源里了,可惜不知道为什么显示不出来。名字叫“WPF拖拽效果源代码”。等我自己能看见了,就把链接贴过来~~~
 
放个截图先~~~~









本文转自 水之真谛 51CTO博客,原文链接:http://blog.51cto.com/liutiemeng/121351,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
搜索推荐 前端开发 C#
推荐7款美观且功能强大的WPF UI库
推荐7款美观且功能强大的WPF UI库
|
3月前
|
C# 开发者 Windows
一款基于Fluent设计风格、现代化的WPF UI控件库
一款基于Fluent设计风格、现代化的WPF UI控件库
|
3月前
|
C# UED 开发者
WPF与性能优化:掌握这些核心技巧,让你的应用从卡顿到丝滑,彻底告别延迟,实现响应速度质的飞跃——从布局到动画全面剖析与实例演示
【8月更文挑战第31天】本文通过对比优化前后的方法,详细探讨了提升WPF应用响应速度的策略。文章首先分析了常见的性能瓶颈,如复杂的XAML布局、耗时的事件处理、不当的数据绑定及繁重的动画效果。接着,通过具体示例展示了如何简化XAML结构、使用后台线程处理事件、调整数据绑定设置以及利用DirectX优化动画,从而有效提升应用性能。通过这些优化措施,WPF应用将更加流畅,用户体验也将得到显著改善。
149 0
|
3月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
58 0
|
3月前
|
C# 开发者 设计模式
WPF开发者必读:命令模式应用秘籍,轻松简化UI与业务逻辑交互,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,命令模式是简化UI与业务逻辑交互的关键技术,通过将请求封装为对象,实现UI操作与业务逻辑分离,便于代码维护与扩展。本文介绍命令模式的概念及实现方法,包括使用`ICommand`接口、`RelayCommand`类及自定义命令等方式,并提供示例代码展示如何在项目中应用命令模式。
44 0
|
3月前
|
开发者 C# 存储
WPF开发者必读:样式与模板的艺术,轻松定制UI外观,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,样式与模板是实现美观界面与一致性的关键工具。样式定义了控件如字体、颜色等属性,而模板则允许自定义控件布局与子控件,两者均可存储于`.xaml`文件中。本文介绍了样式与模板的基础知识,通过示例展示了如何创建并应用它们来改变按钮的外观,从而提升用户体验。
60 0
|
3月前
|
前端开发 开发工具 git
|
3月前
|
前端开发 C# Windows
WPF/C#:如何实现拖拉元素
WPF/C#:如何实现拖拉元素
50 0
|
4月前
|
C# Windows
一款开源、免费、现代化风格的WPF UI控件库
一款开源、免费、现代化风格的WPF UI控件库
126 0
|
6月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
366 0