编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China 头条阅读 学淘股 China Travel
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> WinRT-Metro -> 背水一战 Windows 10 (74) -> 正文阅读

[WinRT-Metro]背水一战 Windows 10 (74)

[源码下载]
背水一战 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
[源码下载]
  WinRT-Metro 最新文章
背水一战 Windows 10 (76)
背水一战 Windows 10 (75)
uwp ListView列表滑动特效
背水一战 Windows 10 (74)
背水一战 Windows 10 (73)
背水一战 Windows 10 (72)
背水一战 Windows 10 (21)
背水一战 Windows 10 (18)
Win10 UWP 开发系列:使用SplitView实现汉堡
UWP中新加的数据绑定方式x:Bind分析总结
上一篇文章           查看所有文章
加:2017-11-21 23:23:03  更:2017-11-21 23:23:05 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 头条阅读 学淘股 China Travel 日历 万年历 2020年2日历
2020-2-22 17:28:03
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识