WPF实例秀——如何获取UI元素的图像 推荐
2008-12-12 17:50
155 查看
WPF实例秀——如何获取UI元素的图像
这个标题还真难说明白,我还是再解释一下吧。
比如我想在UI上拖拽某个元素,拖拽过程中,我需要让这个UI元素的影相跟着鼠标移动(但UI还停留在原位),当放开鼠标的时候,UI元素移动到新的位置。
这是个很常见的需求,实现这个需求的第一步就是获取这个UI元素的影相。实现这一步其实很简单,核心就是使用VisualBrush这个画刷子类。
下面我给出一个简单的例子。
这是UI描述,
<Window x:Class="WpfApplicationImage.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="400" Background="SteelBlue">
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="160"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="160"/>
</Grid.ColumnDefinitions>
<StackPanel x:Name="stackPanelLeft" Background="White">
<Button x:Name="btn" Content="OK" Height="40"/>
</StackPanel>
<Button Content=">>>" Grid.Column="1" Margin="5" Click="Button_Click"/>
<StackPanel x:Name="stackPanelRight" Background="White" Grid.Column="2"/>
</Grid>
</Window>
UI效果是这样的
[align=center][/align]
点击中间的Button,会把左边StackPanel中Button的影像加入到右边的StackPanel中。代码如下(核心是使用VisualBrush):
private void Button_Click(object sender, RoutedEventArgs e)
{
VisualBrush vbrush = new VisualBrush(btn);
Rectangle rect = new Rectangle();
rect.Width = btn.Width;
rect.Height = btn.Height;
rect.Fill = vbrush;
rect.Opacity = 0.5; //为了表示是影像,我让不透明度为50%
this.stackPanelRight.Children.Add(rect);
}
点击几下后,结果如下图:
[align=center][/align]
核心问题解决了,剩下的就好办了。如果想做出拖拽等效果,只是些使用Mouse事件和计算偏移量的小技俩了:p
====================================
我写了一个完整的例子,上传到资源里了,可惜不知道为什么显示不出来。名字叫“WPF拖拽效果源代码”。等我自己能看见了,就把链接贴过来~~~
放个截图先~~~~
这个标题还真难说明白,我还是再解释一下吧。
比如我想在UI上拖拽某个元素,拖拽过程中,我需要让这个UI元素的影相跟着鼠标移动(但UI还停留在原位),当放开鼠标的时候,UI元素移动到新的位置。
这是个很常见的需求,实现这个需求的第一步就是获取这个UI元素的影相。实现这一步其实很简单,核心就是使用VisualBrush这个画刷子类。
下面我给出一个简单的例子。
这是UI描述,
<Window x:Class="WpfApplicationImage.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="400" Background="SteelBlue">
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="160"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="160"/>
</Grid.ColumnDefinitions>
<StackPanel x:Name="stackPanelLeft" Background="White">
<Button x:Name="btn" Content="OK" Height="40"/>
</StackPanel>
<Button Content=">>>" Grid.Column="1" Margin="5" Click="Button_Click"/>
<StackPanel x:Name="stackPanelRight" Background="White" Grid.Column="2"/>
</Grid>
</Window>
UI效果是这样的
[align=center][/align]
点击中间的Button,会把左边StackPanel中Button的影像加入到右边的StackPanel中。代码如下(核心是使用VisualBrush):
private void Button_Click(object sender, RoutedEventArgs e)
{
VisualBrush vbrush = new VisualBrush(btn);
Rectangle rect = new Rectangle();
rect.Width = btn.Width;
rect.Height = btn.Height;
rect.Fill = vbrush;
rect.Opacity = 0.5; //为了表示是影像,我让不透明度为50%
this.stackPanelRight.Children.Add(rect);
}
点击几下后,结果如下图:
[align=center][/align]
核心问题解决了,剩下的就好办了。如果想做出拖拽等效果,只是些使用Mouse事件和计算偏移量的小技俩了:p
====================================
我写了一个完整的例子,上传到资源里了,可惜不知道为什么显示不出来。名字叫“WPF拖拽效果源代码”。等我自己能看见了,就把链接贴过来~~~
放个截图先~~~~
相关文章推荐
- WPF实例秀——如何获取UI元素的图像
- Android 如何获取当前Activity实例对象?
- CE MAPI实例讲解 --- 如何获取Inbox里的所有消息(一)(zhuan)
- WPF如何获取控件之间的相对位置
- WPF学习笔记 - 如何用WPF创建单实例应用程序
- Halcon的图像获取的实例
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- 探讨:如何查看和获取SQL Server实例名
- 揭秘Keras推荐系统如何建立模型、获取用户爱好
- 使用RenderTargetBitmap获取WPF控件图像
- Kinect v2.0如何获取彩色图像和深度图像
- WPF:如何在工作线程中更新窗体的UI元素(Dispatcher机制)
- 通过实例了解如何使用js获取下拉列表框内的值
- C# 如何获取某个类型或类型实例对象的大小
- 如何获取Activity的实例
- 【实例】在java中如何获取xml文件数据
- 推荐如何手写jQuery插件教程实例
- 如何获取应用程序的实例句柄?
- opencv中如何利用mat来获取连续内存的图像区域,并改变形状
- WPF中,如何将绑定源设置到单件实例