Windows 8 Store Apps学习(40) 剪切板操作

剪切板: 复制/粘贴文本, html, 图片, 文件

介绍

重新想象 Windows 8 Store Apps 之 剪切板

Clipboard - 剪切板

复制/粘贴文本

复制/粘贴html

复制/粘贴图片

复制/粘贴文件

示例

1、演示剪切板的基本应用

Clipboard/Demo.xaml

<Page
    x:Class="XamlDemo.Clipboard.Demo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Clipboard"
    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="120 0 0 0">

            <TextBlock Name="lblMsg" FontSize="14.667" />

            <Button Name="btnCopyText" Content="复制一段文本到剪切板" Click="btnCopyText_Click_1" Margin="0 10 0 0" />

            <Button Name="btnPasteText" Content="粘贴剪切板中的文本" Click="btnPasteText_Click_1" Margin="0 10 0 0" />

            <Button Name="btnShowAvailableFormats" Content="获取剪切板中包含的数据的格式类型" Click="btnShowAvailableFormats_Click_1" Margin="0 10 0 0" />

            <Button Name="btnClear" Content="清除剪切板中的全部内容" Click="btnClear_Click_1" Margin="0 10 0 0" />

        </StackPanel>
    </Grid>
</Page>

Clipboard/Demo.xaml.cs

/*
 * Clipboard - 剪切板
 *     SetContent() - 将指定的 DataPackage 存入剪切板
 *     GetContent() - 从剪切板中获取 DataPackage 对象
 *     Clear() - 清除剪切板中的全部数据
 *     Flush() - 正常情况下,关闭 app 后,此 app 保存到剪切板的数据就会消失;调用此方法后,即使关闭 app,剪切板中的数据也不会消失
 *     ContentChanged - 剪切板中的数据发生变化时所触发的事件
 *
 * DataPackage - 用于封装 Clipboard 或 ShareContract 的数据(详细说明见 ShareContract 的 Demo)
 *     SetText(), SetUri(), SetHtmlFormat(), SetRtf(), SetBitmap(), SetStorageItems(), SetData

(), SetDataProvider() - 设置复制到剪切板的各种格式的数据(注:一个 DataPackage 可以有多种不同格

式的数据)
 *     RequestedOperation - 操作类型(DataPackageOperation 枚举: None, Copy, Move, Link),没发现此属性有任何作用
 *
 * DataPackageView - DataPackage 对象的只读版本,从剪切板获取数据或者共享目标接收数据均通过此对象来获取 DataPackage 对象的数据(详细说明见 ShareContract 的 Demo)
 */

using System;
using Windows.ApplicationModel.DataTransfer;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace XamlDemo.Clipboard
{
    public sealed partial class Demo : Page
    {
        public Demo()
        {
            this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            Windows.ApplicationModel.DataTransfer.Clipboard.ContentChanged += Clipboard_ContentChanged;
        }

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            Windows.ApplicationModel.DataTransfer.Clipboard.ContentChanged -= Clipboard_ContentChanged;
        }

        void Clipboard_ContentChanged(object sender, object e)
        {
            lblMsg.Text += Environment.NewLine;
            lblMsg.Text += "剪切板中的内容发生了变化";
        }

        // 复制一段文本到剪切板
        private void btnCopyText_Click_1(object sender, RoutedEventArgs e)
        {
            // 构造保存到剪切板的 DataPackage 对象
            DataPackage dataPackage = new DataPackage();
            dataPackage.SetText("I am webabcd: " + DateTime.Now.ToString());

            try
            {
                Windows.ApplicationModel.DataTransfer.Clipboard.SetContent(dataPackage); // 保存 DataPackage 对象到剪切板
                Windows.ApplicationModel.DataTransfer.Clipboard.Flush(); // 当此 app 关闭后,依然保留剪切板中的数据
                lblMsg.Text = "已将内容复制到剪切板";
            }
            catch (Exception ex)
            {
                lblMsg.Text = ex.ToString();
            }
        }

        // 显示剪切板中的文本数据
        private async void btnPasteText_Click_1(object sender, RoutedEventArgs e)
        {
            // 获取剪切板中的数据
            DataPackageView dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();

            // 如果剪切板中有文本数据,则获取并显示该文本
            if (dataPackageView.Contains(StandardDataFormats.Text))
            {
                try
                {
                    string text = await dataPackageView.GetTextAsync();
                    lblMsg.Text = text;
                }
                catch (Exception ex)
                {
                    lblMsg.Text = ex.ToString();
                }
            }
            else
            {
                lblMsg.Text = "剪切板中无文本内容";
            }
        }

        // 显示剪切板中包含的数据的格式类型,可能会有 StandardDataFormats 枚举的格式,也可能会有自定义的格式(关于自定义格式可以参见:ShareContract 的 Demo)
        private void btnShowAvailableFormats_Click_1(object sender, RoutedEventArgs e)
        {
            DataPackageView dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
            if (dataPackageView != null && dataPackageView.AvailableFormats.Count > 0)
            {
                var availableFormats = dataPackageView.AvailableFormats.GetEnumerator();
                while (availableFormats.MoveNext())
                {
                    lblMsg.Text += Environment.NewLine;
                    lblMsg.Text += availableFormats.Current;
                }
            }
            else
            {
                lblMsg.Text = "剪切板中无任何内容";
            }
        }

        // 清除剪切板中的全部数据
        private void btnClear_Click_1(object sender, RoutedEventArgs e)
        {
            Windows.ApplicationModel.DataTransfer.Clipboard.Clear();
        }
    }
}

2、演示如何复制 html 数据到剪切板,以及如何从剪切板中获取 html 数据

Clipboard/CopyHtml.xaml

<Page
    x:Class="XamlDemo.Clipboard.CopyHtml"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Clipboard"
    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="120 0 0 0">

            <TextBlock Name="lblMsg" FontSize="14.667" />

            <Button Name="btnCopyHtml" Content="复制一段 html 到剪切板" Click="btnCopyHtml_Click_1" Margin="0 10 0 0" />

            <Button Name="btnPasteHtml" Content="粘贴剪切板中的 html" Click="btnPasteHtml_Click_1" Margin="0 10 0 0" />

        </StackPanel>
    </Grid>
</Page>

Clipboard/CopyHtml.xaml.cs

/*
 * 演示如何复制 html 数据到剪切板,以及如何从剪切板中获取 html 数据
 *
 * HtmlFormatHelper - 在 Clipboard 中传递 html 数据或在 ShareContract 中传递 html 数据时的帮助类
 *     CreateHtmlFormat() - 封装需要传递的 html 字符串,以便以 html 方式传递数据
 *     GetStaticFragment() - 解封装传递过来的经过封装的 html 数据,从而获取初始需要传递的 html 字符串
 */

using System;
using Windows.ApplicationModel.DataTransfer;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace XamlDemo.Clipboard
{
    public sealed partial class CopyHtml : Page
    {
        public CopyHtml()
        {
            this.InitializeComponent();
        }

        // 复制 html 字符串到剪切板
        private void btnCopyHtml_Click_1(object sender, RoutedEventArgs e)
        {
            DataPackage dataPackage = new DataPackage();
            // 封装一下需要复制的 html 数据,以便以 html 的方式将数据复制到剪切板
            string htmlFormat = HtmlFormatHelper.CreateHtmlFormat("<body>I am webabcd</body>");
            dataPackage.SetHtmlFormat(htmlFormat);

            try
            {
                Windows.ApplicationModel.DataTransfer.Clipboard.SetContent(dataPackage);
                lblMsg.Text = "已将内容复制到剪切板";
            }
            catch (Exception ex)
            {
                lblMsg.Text = ex.ToString();
            }
        }

        // 显示剪切板中的 html 数据
        private async void btnPasteHtml_Click_1(object sender, RoutedEventArgs e)
        {
            DataPackageView dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();

            if (dataPackageView.Contains(StandardDataFormats.Html))
            {
                try
                {
                    // 封装后的数据
                    string htmlFormat = await dataPackageView.GetHtmlFormatAsync();
                    // 封装前的数据
                    string htmlFragment = HtmlFormatHelper.GetStaticFragment(htmlFormat);

                    lblMsg.Text = "htmlFormat(封装后的数据): ";
                    lblMsg.Text += Environment.NewLine;
                    lblMsg.Text += htmlFormat;
                    lblMsg.Text += Environment.NewLine;
                    lblMsg.Text += Environment.NewLine;
                    lblMsg.Text += "htmlFragment(封装前的数据): ";
                    lblMsg.Text += Environment.NewLine;
                    lblMsg.Text += htmlFragment;
                }
                catch (Exception ex)
                {
                    lblMsg.Text = ex.ToString();
                }
            }
            else
            {
                lblMsg.Text = "剪切板中无 html 内容";
            }
        }
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索windows
, 数据
, text
, 剪切板
, 如何给 发送粘贴板
, clipboard
, 剪切
, VBS,剪切板
, 封装html
, 剪切板循环
, js复制到剪切板
js复制到粘贴板
,以便于您获取更多的相关知识。

时间: 2024-08-06 20:24:07

Windows 8 Store Apps学习(40) 剪切板操作的相关文章

Windows 8 Store Apps学习(39) 契约: Share Contract

介绍 重新想象 Windows 8 Store Apps 之 契约 Share Contract - 右侧边栏称之为 Charm,其 中的"共享"称之为 Share Contract 示例 1.演示如何开发共享源 Contracts/ShareContract/ShareSource.xaml <Page x:Class="XamlDemo.Contracts.ShareContract.ShareSource" xmlns="http://sche

Windows 8 Store Apps学习(41) 打印

介绍 重新想象 Windows 8 Store Apps 之 打印 示例 1.需要打印的文档 Print/PrintPage.xaml <Page x:Class="XamlDemo.Print.PrintPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xam

Windows 8 Store Apps学习(21) 动画: ThemeTransition(过渡效果)

介绍 重新想象 Windows 8 Store Apps 之 动画 ThemeTransition 的概述 EntranceThemeTransition - 页面间跳转时的过渡效果 ContentThemeTransition - 内容改变时的过渡效果 RepositionThemeTransition - 位置改变时的过渡效果 PopupThemeTransition - 弹出时的过渡效果 AddDeleteThemeTransition - 添加项或删除项时的过渡效果 ReorderThe

Windows 8 Store Apps学习(71)

作者:webabcd 介绍 重新想象 Windows 8 Store Apps 之 其它 C# 中调用 Windows Runtime Component(C++) 让 Windows Runtime Component(C++) 作为代理以调用 DLL(C++) 通过 C++ 和 D3D 获取屏幕分辨率 示例 一.演示如何在 C# 中调用 Windows Runtime Component(C++),以及 Windows Runtime Component(C++) 如何作为代理调用 DLL(

Windows 8 Store Apps学习70) 其它: 文件压缩和解压缩

重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期 作者:webabcd 介绍 重新想象 Windows 8 Store Apps 之 其它 文件压缩和解压缩 与 Windows 商店相关的操作 app 与 web 几个 Core 的应用 页面的生命周期和程序的生命周期 示例 1.演示如何压缩和解压缩文件 Feature/Compress

Windows 8 Store Apps学习(69) 其它: 自定义启动屏幕,

重新想象 Windows 8 Store Apps (69) - 其它: 自定义启动屏幕, 程序的运行位置, 保持屏幕的点亮状态, MessageDialog, PopupMenu 作者:webabcd 介绍 重新想象 Windows 8 Store Apps 之 其它 自定义启动屏幕 检查当前呈现的应用程序是运行在本地还是运行在远程桌面或模拟器 保持屏幕的点亮状态 MessageDialog - 信息对话框 PopupMenu - 上下文菜单 示例 1.演示如何自定义启动屏幕 Feature/

Windows 8 Store Apps学习(68) 后台任务:控制通道(ControlChannel)

介绍 重新想象 Windows 8 Store Apps 之 后台任务 控制通道(ControlChannel) 示例 1.客户端与服务端做 ControlChannel 通信的关键代码 ControlChannelHelper/AppContext.cs /* * 本例通过全局静态变量来实现 app 与 task 的信息共享,以便后台任务可以获取到 app 中的相关信息 * * 注: * 也可以通过 Windows.ApplicationModel.Core.CoreApplication.P

Windows 8 Store Apps学习(67) 后台任务: 推送通知

介绍 重新想象 Windows 8 Store Apps 之 后台任务 推送通知 示例 1.客户端 BackgroundTask/PushNotification.xaml <Page x:Class="XamlDemo.BackgroundTask.PushNotification" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://s

Windows 8 Store Apps学习(66) 后台任务: 下载和上传

介绍 重新想象 Windows 8 Store Apps 之 后台任务 后台下载任务 后台上传任务 示例 扩展了 DownloadOperation 和 UploadOperation,以便下载进度或上传进度可通知 BackgroundTask/TransferModel.cs /* * 扩展了 DownloadOperation 和 UploadOperation,以便下载进度或上传进度可通知 */ using System; using System.ComponentModel; usin