Compartir a través de


Copiar y pegar

Copiar y pegar es una manera fundamental de que los usuarios intercambien datos entre aplicaciones o dentro de una aplicación. En este artículo se muestra cómo implementar las funciones de copiar y pegar en aplicaciones de WinUI y la Plataforma Universal de Windows (UWP) mediante las API del Portapapeles. Aprenderá a copiar, cortar y pegar datos, realizar un seguimiento de los cambios del Portapapeles y usar la clase DataPackage para controlar diferentes formatos de datos.

Nota:

También puedes usar estas API en otras aplicaciones de escritorio a través de las API de Windows Runtime (WinRT). Para obtener más información, consulta Llamar a las API de Windows Runtime en aplicaciones de escritorio.

Para ver ejemplos de código completos que muestran diferentes escenarios de copia y pegado, consulta el ejemplo del Portapapeles de UWP en GitHub.

Comprobación de la compatibilidad con el Portapapeles integrado

En muchos casos, no es necesario escribir código para admitir operaciones del Portapapeles. Muchos de los controles XAML predeterminados que puedes usar para crear aplicaciones ya admiten operaciones del Portapapeles.

Prepararse

En primer lugar, incluya el espacio de nombres Windows.ApplicationModel.DataTransfer en la aplicación. A continuación, agregue una instancia del objeto DataPackage . Este objeto contiene los datos que el usuario quiere copiar y cualquier propiedad (como una descripción) que quiera incluir.

using Windows.ApplicationModel.DataTransfer;
...
var dataPackage = new DataPackage();

Copiar y cortar

Copiar y cortar (también denominados mover) funcionan casi exactamente igual. Elija la operación que desee mediante la propiedad RequestedOperation .

// copy 
dataPackage.RequestedOperation = DataPackageOperation.Copy;
// or cut
dataPackage.RequestedOperation = DataPackageOperation.Move;

Establecer el contenido copiado

A continuación, puede agregar los datos seleccionados por un usuario al objeto DataPackage . Si la clase DataPackage admite estos datos, puede usar uno de los métodos correspondientes del objeto DataPackage . Aquí se muestra cómo agregar texto mediante el método SetText :

dataPackage.SetText("Hello World!");

El último paso es agregar el DataPackage al Portapapeles llamando al método SetContent estático.

Clipboard.SetContent(dataPackage);

Pegar

Para obtener el contenido del Portapapeles, llame al método estático GetContent. Este método devuelve una clase DataPackageView que contiene el contenido. Este objeto es casi idéntico a un objeto DataPackage , salvo que su contenido es de solo lectura. Con ese objeto, puede usar el método AvailableFormats o Contains para identificar qué formatos están disponibles. A continuación, puede llamar al método DataPackageView correspondiente para obtener los datos.

async void OutputClipboardText()
{
    DataPackageView dataPackageView = Clipboard.GetContent();
    if (dataPackageView.Contains(StandardDataFormats.Text))
    {
        string text = await dataPackageView.GetTextAsync();
        // To output the text from this example, you need a TextBlock control
        TextOutput.Text = "Clipboard now contains: " + text;
    }
}

Seguimiento de cambios en el portapapeles

Además de copiar y pegar comandos, es posible que también desee realizar un seguimiento de los cambios del Portapapeles. Para ello, maneje el evento ContentChanged del Portapapeles.

Clipboard.ContentChanged += async (s, e) => 
{
    DataPackageView dataPackageView = Clipboard.GetContent();
    if (dataPackageView.Contains(StandardDataFormats.Text))
    {
        string text = await dataPackageView.GetTextAsync();
        // To output the text from this example, you need a TextBlock control
        TextOutput.Text = "Clipboard now contains: " + text;
    }
}