コピーと貼り付けは、ユーザーがアプリ間またはアプリ内でデータを交換するための基本的な方法です。 この記事では、クリップボード API を使用して、WinUI アプリとユニバーサル Windows プラットフォーム (UWP) アプリにコピーと貼り付けを実装する方法について説明します。 データのコピー、切り取り、貼り付け、クリップボードの変更の追跡、 DataPackage クラスを使用してさまざまなデータ形式を処理する方法について説明します。
注
これらの API は、Windows ランタイム (WinRT) API を介して他のデスクトップ アプリでも使用できます。 詳細については、「 デスクトップ アプリでの Windows ランタイム API の呼び出し」を参照してください。
さまざまなコピーと貼り付けのシナリオを示す完全なコード例については、 GitHub の UWP クリップボードのサンプルを参照してください。
組み込みのクリップボードのサポートを確認する
多くの場合、クリップボード操作をサポートするためにコードを記述する必要はありません。 アプリの作成に使用できる既定の XAML コントロールの多くは、既にクリップボード操作をサポートしています。
セットアップを行う
まず、アプリに Windows.ApplicationModel.DataTransfer 名前空間を含めます。 次に、 DataPackage オブジェクトのインスタンスを追加します。 このオブジェクトには、ユーザーがコピーするデータと、含めるプロパティ (説明など) の両方が含まれます。
コピーと切り取り
コピーと切り取り ( 移動とも呼ばれます) の動作はほぼ同じです。 RequestedOperation プロパティを使用して、必要な操作を選択します。
// copy
dataPackage.RequestedOperation = DataPackageOperation.Copy;
// or cut
dataPackage.RequestedOperation = DataPackageOperation.Move;
コピーしたコンテンツを設定する
次に、ユーザーが選択したデータを DataPackage オブジェクトに追加できます。 このデータが DataPackage クラスでサポートされている場合は、DataPackage オブジェクトの対応するメソッドのいずれかを使用できます。 SetText メソッドを使用してテキストを追加する方法を次に示します。
最後の手順では、静的な 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;
}
}
関連コンテンツ
Windows developer