다음을 통해 공유


복사 및 붙여넣기

복사 및 붙여넣기는 사용자가 앱 간에 또는 앱 내에서 데이터를 교환하는 기본적인 방법입니다. 이 문서에서는 클립보드 API를 사용하여 WinUI 및 UWP(유니버설 Windows 플랫폼) 앱에 복사 및 붙여넣기를 구현하는 방법을 보여 줍니다. 데이터를 복사, 잘라내기 및 붙여넣고, 클립보드 변경 내용을 추적하고, DataPackage 클래스를 사용하여 다양한 데이터 형식을 처리하는 방법을 알아봅니다.

비고

WinRT(Windows 런타임) API를 통해 다른 데스크톱 앱에서 이러한 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;
    }
}