コピーと貼り付け
この記事では、ユニバーサル 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;
}
}