コピーと貼り付け

この記事では、ユニバーサル Windows プラットフォーム (UWP) アプリで、クリップボードを使用してコピーと貼り付けをサポートする方法について説明します。 コピーと貼り付けはアプリ間やアプリ内でデータを交換するための従来の方法であり、クリップボード操作はほとんどすべてのアプリである程度サポートできます。 いくつかの異なるコピーと貼り付けのシナリオを示す完全なコード例については、「クリップボードのサンプル」を参照してください。

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

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

準備

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

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

こちらもご覧ください