次の方法で共有


コピーと貼り付け

コピーと貼り付けは、ユーザーがアプリ間またはアプリ内でデータを交換するための基本的な方法です。 この記事では、クリップボード API を使用して、WinUI アプリとユニバーサル Windows プラットフォーム (UWP) アプリにコピーと貼り付けを実装する方法について説明します。 データのコピー、切り取り、貼り付け、クリップボードの変更の追跡、 DataPackage クラスを使用してさまざまなデータ形式を処理する方法について説明します。

これらの API は、Windows ランタイム (WinRT) API を介して他のデスクトップ アプリでも使用できます。 詳細については、「 デスクトップ アプリでの Windows ランタイム API の呼び出し」を参照してください。

さまざまなコピーと貼り付けのシナリオを示す完全なコード例については、 GitHub の UWP クリップボードのサンプルを参照してください。

組み込みのクリップボードのサポートを確認する

多くの場合、クリップボード操作をサポートするためにコードを記述する必要はありません。 アプリの作成に使用できる既定の XAML コントロールの多くは、既にクリップボード操作をサポートしています。

セットアップを行う

まず、アプリに Windows.ApplicationModel.DataTransfer 名前空間を含めます。 次に、 DataPackage オブジェクトのインスタンスを追加します。 このオブジェクトには、ユーザーがコピーするデータと、含めるプロパティ (説明など) の両方が含まれます。

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

コピーと切り取り

コピーと切り取り ( 移動とも呼ばれます) の動作はほぼ同じです。 RequestedOperation プロパティを使用して、必要な操作を選択します。

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

コピーしたコンテンツを設定する

次に、ユーザーが選択したデータを DataPackage オブジェクトに追加できます。 このデータが DataPackage クラスでサポートされている場合は、DataPackage オブジェクトの対応するメソッドのいずれかを使用できます。 SetText メソッドを使用してテキストを追加する方法を次に示します。

dataPackage.SetText("Hello World!");

最後の手順では、静的な SetContent メソッドを呼び出して、DataPackage をクリップボードに追加します。

Clipboard.SetContent(dataPackage);

貼り付け

クリップボードの内容を取得するには、静的 な GetContent メソッドを呼び出します。 このメソッドは、コンテンツを含む DataPackageView を返します。 このオブジェクトは DataPackage オブジェクトとほぼ同じですが、その内容は読み取り専用です。 そのオブジェクトを使用すると、 AvailableFormats メソッドまたは Contains メソッドを使用して、使用可能な形式を識別できます。 次に、対応する DataPackageView メソッドを呼び出してデータを取得できます。

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;
    }
}

クリップボードへの変更を追跡する

コマンドのコピーと貼り付けに加えて、クリップボードの変更を追跡することもできます。 これを行うには、クリップボードの ContentChanged イベントを 処理します。

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;
    }
}