背水一战 Windows 10 (74) - 控件(控件基类): UIElement - 与 CanDrag 相关的事件, 与 AllowDrop 相关的事件
作者:webabcd
介绍
背水一战 Windows 10 之 控件(控件基类 - UIElement)
- 与 CanDrag 相关的事件(DragStartingEventArgs, DropCompletedEventArgs)
- 与 AllowDrop 相关的事件(DragEventArgs)
示例
1、演示 UIElement 的与 CanDrag 相关的事件(DragStartingEventArgs, DropCompletedEventArgs)
Controls/BaseControl/UIElementDemo/DragDropDemo3.xaml
<Page
x:Class="Windows10.Controls.BaseControl.UIElementDemo.DragDropDemo3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Controls.BaseControl.UIElementDemo"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="5"> <Grid Name="dragGrid1" Background="Orange" Margin="5"
CanDrag="True"
DragStarting="dragGrid1_DragStarting">
<TextBlock Name="sourceTextBlock1" Text="i am sourceTextBlock1" Margin="20" />
</Grid> <Grid Name="dragGrid2" Background="Orange" Margin="5"
CanDrag="True"
DragStarting="dragGrid2_DragStarting">
<TextBlock Name="sourceTextBlock2" Text="i am sourceTextBlock2" Margin="20" />
</Grid> <Grid Name="dragGrid3" Background="Orange" Margin="5"
CanDrag="True"
DragStarting="dragGrid3_DragStarting">
<TextBlock Name="sourceTextBlock3" Text="i am sourceTextBlock3" Margin="20" />
</Grid> <Grid Name="dragGrid4" Background="Orange" Margin="5"
CanDrag="True"
DragStarting="dragGrid4_DragStarting">
<TextBlock Name="sourceTextBlock4" Text="i am sourceTextBlock4" Margin="20" />
</Grid> <Grid Name="dropGrid" Background="Blue" Margin="5"
AllowDrop="True"
Drop="dropGrid_Drop"
DragEnter="dropGrid_DragEnter">
<TextBlock Name="targetTextBlock" TextWrapping="Wrap" MinHeight="300" Margin="20" />
</Grid> </StackPanel>
</Grid>
</Page>
Controls/BaseControl/UIElementDemo/DragDropDemo3.xaml.cs
/*
* UIElement - UIElement(继承自 DependencyObject, 请参见 /Controls/BaseControl/DependencyObjectDemo/)
*
*
* DragStartingEventArgs - DragStarting 的事件参数(CanDrag 的 UIElement 触发的事件)
* Cancel - 是否取消 drag 操作
* Data - 获取一个 DataPackage 类型的对象,用于保存数据(详见“分享”部分)
* DragUI - 获取一个 DragUI 类型的对象,用于设置 drag 过程中的 ui
* GetDeferral() - 获取类型为 DragOperationDeferral 的异步操作对象,同时开始异步操作,之后通过 DragOperationDeferral 的 Complete() 通知完成异步操作
* GetPosition(UIElement relativeTo) - 获取当前 drag 的点与指定 UIELement 的相对位置(传 null 则返回相对于 app 原点的位置)
*
* DragUI - 用于设置 drag 过程中的 ui
* SetContentFromDataPackage() - 由系统根据 DataPackage 中保存的数据的类型来决定 ui
* SetContentFromBitmapImage() - 指定一个 BitmapImage 对象作为 ui,同时可以指定此 ui 相对于 drag 点的位置
* SetContentFromSoftwareBitmap() - 指定一个 SoftwareBitmap 对象作为 ui,同时可以指定此 ui 相对于 drag 点的位置
*
* DropCompletedEventArgs - DropCompleted 的事件参数(CanDrag 的 UIElement 触发的事件)
* DropResult - 获取 drop 的结果,一个 DataPackageOperation 类型的枚举(None, Copy, Move, Link)
*
*
* 本例用于演示 UIElement 的与 CanDrag 相关的事件(DragStartingEventArgs, DropCompletedEventArgs)
*/ using System;
using Windows.ApplicationModel.DataTransfer;
using Windows.Graphics.Imaging;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Imaging; namespace Windows10.Controls.BaseControl.UIElementDemo
{
public sealed partial class DragDropDemo3 : Page
{
public DragDropDemo3()
{
this.InitializeComponent();
} private void dragGrid1_DragStarting(UIElement sender, DragStartingEventArgs args)
{
args.Data.SetText(sourceTextBlock1.Text);
} private void dragGrid2_DragStarting(UIElement sender, DragStartingEventArgs args)
{
args.Data.SetText(sourceTextBlock2.Text); // 由系统根据 DataPackage 中保存的数据的类型来决定 drag 过程中的 ui
args.DragUI.SetContentFromDataPackage();
} private void dragGrid3_DragStarting(UIElement sender, DragStartingEventArgs args)
{
args.Data.SetText(sourceTextBlock3.Text); // drag 过程中的 ui 为指定的 BitmapImage
args.DragUI.SetContentFromBitmapImage(new BitmapImage(new Uri("ms-appx:///Assets/hololens.jpg", UriKind.Absolute)));
} private async void dragGrid4_DragStarting(UIElement sender, DragStartingEventArgs args)
{
args.Data.SetText(sourceTextBlock4.Text); // 获取异步操作对象
DragOperationDeferral deferral = args.GetDeferral(); // 将 dragGrid4 截图,并以此创建一个 SoftwareBitmap 对象
RenderTargetBitmap rtb = new RenderTargetBitmap();
await rtb.RenderAsync(dragGrid4);
IBuffer buffer = await rtb.GetPixelsAsync();
SoftwareBitmap bitmap = SoftwareBitmap.CreateCopyFromBuffer(buffer, BitmapPixelFormat.Bgra8, rtb.PixelWidth, rtb.PixelHeight, BitmapAlphaMode.Premultiplied); // drag 过程中的 ui 为指定的 SoftwareBitmap
args.DragUI.SetContentFromSoftwareBitmap(bitmap); // 完成异步操作
deferral.Complete();
} private void dropGrid_DragEnter(object sender, DragEventArgs e)
{
e.AcceptedOperation = DataPackageOperation.Copy;
e.DragUIOverride.Caption = "我是文本";
} private async void dropGrid_Drop(object sender, DragEventArgs e)
{
string text = await e.DataView.GetTextAsync();
targetTextBlock.Text += text;
targetTextBlock.Text += Environment.NewLine;
}
}
}
2、演示 UIElement 的与 AllowDrop 相关的事件(DragEventArgs)
Controls/BaseControl/UIElementDemo/DragDropDemo4.xaml
<Page
x:Class="Windows10.Controls.BaseControl.UIElementDemo.DragDropDemo4"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Controls.BaseControl.UIElementDemo"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="5"> <Grid Name="dragGrid" Background="Orange" Margin="5"
CanDrag="True"
DragStarting="dragGrid_DragStarting">
<TextBlock Name="sourceTextBlock" Text="i am webabcd" Margin="20" />
</Grid> <Grid Name="dropGrid1" Background="Blue" Margin="5"
AllowDrop="True"
Drop="dropGrid1_Drop"
DragEnter="dropGrid1_DragEnter">
<TextBlock Name="targetTextBlock1" TextWrapping="Wrap" Height="80" Margin="20" />
</Grid> <Grid Name="dropGrid2" Background="Blue" Margin="5"
AllowDrop="True"
Drop="dropGrid2_Drop"
DragEnter="dropGrid2_DragEnter">
<TextBlock Name="targetTextBlock2" TextWrapping="Wrap" Height="80" Margin="20" />
</Grid> <Grid Name="dropGrid3" Background="Blue" Margin="5"
AllowDrop="True"
Drop="dropGrid3_Drop"
DragEnter="dropGrid3_DragEnter">
<TextBlock Name="targetTextBlock3" TextWrapping="Wrap" Height="80" Margin="20" />
</Grid> <Grid Name="dropGrid4" Background="Blue" Margin="5"
AllowDrop="True"
Drop="dropGrid4_Drop"
DragEnter="dropGrid4_DragEnter">
<TextBlock Name="targetTextBlock4" TextWrapping="Wrap" Height="80" Margin="20" />
</Grid> </StackPanel>
</Grid>
</Page>
Controls/BaseControl/UIElementDemo/DragDropDemo4.xaml.cs
/*
* UIElement - UIElement(继承自 DependencyObject, 请参见 /Controls/BaseControl/DependencyObjectDemo/)
*
*
* DragEventArgs - Drop, DragEnter, DragOver, DragLeave 的事件参数(AllowDrop 的 UIElement 触发的事件)
* AcceptedOperation - 一个 DataPackageOperation 类型的枚举,用于指定操作的类型
* None - 无操作
* Copy - 复制操作
* Move - 移动操作
* Link - 链接操作
* DataView - 获取一个 DataPackageView 类型的对象,用于获取 DataPackage 中保存的数据(详见“分享”部分)
* DragUIOverride - 获取一个 DragUIOverride 类型的对象,用于设置 drag 过程中的 ui(在 drop 区域内)。如果此时和 drag 过程中的 DragUI 有冲突的话,则以此 DragUIOverride 为准
* Handled - 是否标记为已处理
* Modifiers - 获取一个 DragDropModifiers 类型的枚举(FlagsAttribute),用于获取当前的按键状态
* None, Shift, Control, Alt, LeftButton, MiddleButton, RightButton
* GetDeferral() - 获取类型为 DragOperationDeferral 的异步操作对象,同时开始异步操作,之后通过 DragOperationDeferral 的 Complete() 通知完成异步操作
* GetPosition(UIElement relativeTo) - 获取当前 drag 的点与指定 UIELement 的相对位置(传 null 则返回相对于 app 原点的位置)
*
* DragUIOverride - 用于设置 drag 过程中的 ui(在 drop 区域内)。它包括 3 个部分,分别是 Caption, Glyph, Content
* Caption - 标题
* IsCaptionVisible - 是否显示标题
* IsGlyphVisible - 是否显示标题的左边的那个图标(这个图标会根据你的 DataPackageOperation 的不同而不同)
* IsContentVisible - 是否显示内容(就是除了 Caption 和 Glyph 之外的内容)
* Clear() - 清除 drag 过程中的 ui(但是实际测试发现并不能清除,如果需要的话还是分别设置 IsCaptionVisible, IsGlyphVisible, IsContentVisible 吧)
* SetContentFromBitmapImage() - 指定一个 BitmapImage 对象作为 ui,同时可以指定此 ui 相对于 drag 点的位置
* SetContentFromSoftwareBitmap() - 指定一个 SoftwareBitmap 对象作为 ui,同时可以指定此 ui 相对于 drag 点的位置
*
*
* 本例用于演示 UIElement 的与 AllowDrop 相关的事件(DragEventArgs)
*/ using System;
using Windows.ApplicationModel.DataTransfer;
using Windows.Graphics.Imaging;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Imaging; namespace Windows10.Controls.BaseControl.UIElementDemo
{
public sealed partial class DragDropDemo4 : Page
{
public DragDropDemo4()
{
this.InitializeComponent();
} private void dragGrid_DragStarting(UIElement sender, DragStartingEventArgs args)
{
args.Data.SetText(sourceTextBlock.Text);
} private void dropGrid1_DragEnter(object sender, DragEventArgs e)
{
e.AcceptedOperation = DataPackageOperation.Copy;
e.DragUIOverride.Caption = "我是文本"; targetTextBlock1.Text += e.Modifiers;
targetTextBlock1.Text += Environment.NewLine;
} private void dropGrid2_DragEnter(object sender, DragEventArgs e)
{
e.AcceptedOperation = DataPackageOperation.Copy;
e.DragUIOverride.Caption = "我是文本"; // DragUIOverride 包含 3 个部分,分别是 Caption, Glyph, Content
e.DragUIOverride.IsCaptionVisible = false;
e.DragUIOverride.IsGlyphVisible = false;
e.DragUIOverride.IsContentVisible = false; targetTextBlock2.Text += e.Modifiers;
targetTextBlock2.Text += Environment.NewLine;
} private void dropGrid3_DragEnter(object sender, DragEventArgs e)
{
e.AcceptedOperation = DataPackageOperation.Copy;
e.DragUIOverride.Caption = "我是文本"; // drag 到 drop 区域后,drag 过程中的 ui 改为指定的 BitmapImage
e.DragUIOverride.SetContentFromBitmapImage(new BitmapImage(new Uri("ms-appx:///Assets/hololens.jpg", UriKind.Absolute))); targetTextBlock3.Text += e.Modifiers;
targetTextBlock3.Text += Environment.NewLine;
} private async void dropGrid4_DragEnter(object sender, DragEventArgs e)
{
e.AcceptedOperation = DataPackageOperation.Copy;
e.DragUIOverride.Caption = "我是文本"; // 获取异步操作对象
DragOperationDeferral deferral = e.GetDeferral();
RenderTargetBitmap rtb = new RenderTargetBitmap();
await rtb.RenderAsync(dragGrid);
IBuffer buffer = await rtb.GetPixelsAsync();
SoftwareBitmap bitmap = SoftwareBitmap.CreateCopyFromBuffer(buffer, BitmapPixelFormat.Bgra8, rtb.PixelWidth, rtb.PixelHeight, BitmapAlphaMode.Premultiplied); // drag 到 drop 区域后,drag 过程中的 ui 改为指定的 SoftwareBitmap
e.DragUIOverride.SetContentFromSoftwareBitmap(bitmap); // 完成异步操作
deferral.Complete(); targetTextBlock4.Text += e.Modifiers;
targetTextBlock4.Text += Environment.NewLine;
} private async void dropGrid1_Drop(object sender, DragEventArgs e)
{
string text = await e.DataView.GetTextAsync();
targetTextBlock1.Text += text;
targetTextBlock1.Text += Environment.NewLine;
} private async void dropGrid2_Drop(object sender, DragEventArgs e)
{
string text = await e.DataView.GetTextAsync();
targetTextBlock2.Text += text;
targetTextBlock2.Text += Environment.NewLine;
} private async void dropGrid3_Drop(object sender, DragEventArgs e)
{
string text = await e.DataView.GetTextAsync();
targetTextBlock3.Text += text;
targetTextBlock3.Text += Environment.NewLine;
} private async void dropGrid4_Drop(object sender, DragEventArgs e)
{
string text = await e.DataView.GetTextAsync();
targetTextBlock4.Text += text;
targetTextBlock4.Text += Environment.NewLine;
}
}
}
OK
[源码下载]
背水一战 Windows 10 (74) - 控件(控件基类): UIElement - 与 CanDrag 相关的事件, 与 AllowDrop 相关的事件的更多相关文章
- 背水一战 Windows 10 (16) - 动画: ThemeAnimation(主题动画)
[源码下载] 背水一战 Windows 10 (16) - 动画: ThemeAnimation(主题动画) 作者:webabcd 介绍背水一战 Windows 10 之 动画 PopInThemeA ...
- 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
[源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...
- 背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog
[源码下载] 背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog 作者:webabcd 介绍背水一战 Windows 10 之 控 ...
- 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu
[源码下载] 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu 作者:webabcd 介绍背水一战 Windows 10 之 控件(弹 ...
- 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout
[源码下载] 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout 作者:webabcd 介绍背水一战 Windows 10 之 ...
- 背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing
[源码下载] 背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing 作者:webabcd 介绍背水一 ...
- 背水一战 Windows 10 (33) - 控件(选择类): ListBox, RadioButton, CheckBox, ToggleSwitch
[源码下载] 背水一战 Windows 10 (33) - 控件(选择类): ListBox, RadioButton, CheckBox, ToggleSwitch 作者:webabcd 介绍背水一 ...
- 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox
[源码下载] 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(选择类) Sel ...
- 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton
[源码下载] 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButt ...
随机推荐
- Python第1天
今天主要学习内容如下: 概论,各种开发语言的对比,高级语言包括:python(开发效率高,执行效率低) Java(开发效率低,执行效率高),PHP,低级语言包括:C语言,汇编语言: Python 语言 ...
- Django之如何预防csrf功能的方式 form提交与ajax提交
1. 什么是csrf认证: 主要是防止别人恶意登录你的账户信息用的: 2. csrf认证在django的实现方式: 分为两种, 一种是from表单提交的方式,另一种是ajax提交实现方式 前端: &l ...
- Springboot 热部署问题。亲测可用。
本人开发使用的是Mac系统,windows应该类似.主要是 spring-boot-devtools的使用 参考:mac下的idea设置,是不是有疑问,既然别人写好了,为啥你还要再来一次,因为我使用了 ...
- TXLSReadWriteII5 单元格读写
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...
- SpringJDBC中jdbcTemplate 的使用
一:定义 SpringJDBC是spring官方提供的一个持久层框架,对JDBC进行了封装,提供了一个JDBCTemplated对象简化JDBC的开发.但Spring本身不是一个orm框架,与hibe ...
- hive的常用操作
1.hive的数据类型 tinyint/smallint/int/bigint tinyint:从 0 到 255 的整型数据 smallint:从 0 到 65535 的整型数据 int:从 0 到 ...
- Pandas分组
GroupBy技术 分组运算的过程可以用下面的流程图表示出来 import pandas as pd from pandas import Series import numpy as np df = ...
- 【Django】RROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
刚刚启动项目的时候,突然报了这个错误.之前一直正常 后来百度一下,让我在window的host文件下,把被注释的127.0.0.1 localhost这个的注释取消 然鹅并木有用 直接用cmd连接 ...
- 169. Majority Element (Array)
Given an array of size n, find the majority element. The majority element is the element that appear ...
- I/O系统(一)
输入输出系统的发展大致可以分为4个阶段1.早期阶段 特点: 1.1每个IO设备都得有一套独立的逻辑电路和CPU相连. 1.2输入输出过程需要通过CPU,穿插在程序运行的过程中,处理IO时候 ...