[源码下载]

背水一战 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 相关的事件的更多相关文章

  1. 背水一战 Windows 10 (16) - 动画: ThemeAnimation(主题动画)

    [源码下载] 背水一战 Windows 10 (16) - 动画: ThemeAnimation(主题动画) 作者:webabcd 介绍背水一战 Windows 10 之 动画 PopInThemeA ...

  2. 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件

    [源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...

  3. 背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog

    [源码下载] 背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog 作者:webabcd 介绍背水一战 Windows 10 之 控 ...

  4. 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu

    [源码下载] 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu 作者:webabcd 介绍背水一战 Windows 10 之 控件(弹 ...

  5. 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout

    [源码下载] 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout 作者:webabcd 介绍背水一战 Windows 10 之 ...

  6. 背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing

    [源码下载] 背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing 作者:webabcd 介绍背水一 ...

  7. 背水一战 Windows 10 (33) - 控件(选择类): ListBox, RadioButton, CheckBox, ToggleSwitch

    [源码下载] 背水一战 Windows 10 (33) - 控件(选择类): ListBox, RadioButton, CheckBox, ToggleSwitch 作者:webabcd 介绍背水一 ...

  8. 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox

    [源码下载] 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(选择类) Sel ...

  9. 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton

    [源码下载] 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButt ...

随机推荐

  1. Python第1天

    今天主要学习内容如下: 概论,各种开发语言的对比,高级语言包括:python(开发效率高,执行效率低) Java(开发效率低,执行效率高),PHP,低级语言包括:C语言,汇编语言: Python 语言 ...

  2. Django之如何预防csrf功能的方式 form提交与ajax提交

    1. 什么是csrf认证: 主要是防止别人恶意登录你的账户信息用的: 2. csrf认证在django的实现方式: 分为两种, 一种是from表单提交的方式,另一种是ajax提交实现方式 前端: &l ...

  3. Springboot 热部署问题。亲测可用。

    本人开发使用的是Mac系统,windows应该类似.主要是 spring-boot-devtools的使用 参考:mac下的idea设置,是不是有疑问,既然别人写好了,为啥你还要再来一次,因为我使用了 ...

  4. TXLSReadWriteII5 单元格读写

    unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...

  5. SpringJDBC中jdbcTemplate 的使用

    一:定义 SpringJDBC是spring官方提供的一个持久层框架,对JDBC进行了封装,提供了一个JDBCTemplated对象简化JDBC的开发.但Spring本身不是一个orm框架,与hibe ...

  6. hive的常用操作

    1.hive的数据类型 tinyint/smallint/int/bigint tinyint:从 0 到 255 的整型数据 smallint:从 0 到 65535 的整型数据 int:从 0 到 ...

  7. Pandas分组

    GroupBy技术 分组运算的过程可以用下面的流程图表示出来 import pandas as pd from pandas import Series import numpy as np df = ...

  8. 【Django】RROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

    刚刚启动项目的时候,突然报了这个错误.之前一直正常 后来百度一下,让我在window的host文件下,把被注释的127.0.0.1   localhost这个的注释取消 然鹅并木有用 直接用cmd连接 ...

  9. 169. Majority Element (Array)

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  10. I/O系统(一)

    输入输出系统的发展大致可以分为4个阶段1.早期阶段 特点:    1.1每个IO设备都得有一套独立的逻辑电路和CPU相连.    1.2输入输出过程需要通过CPU,穿插在程序运行的过程中,处理IO时候 ...