Schnellstart: Grundlagen zur Zwischenablage (Windows Store-Apps mit C#/VB/C++ und XAML)

Die besten Apps geben Benutzern die größtmögliche Kontrolle über ihre Daten. Ein wichtiges Steuerungsverfahren, das die meisten Benutzer erwarten, sind Zwischenablageaktionen. Mit diesen Aktionen können Benutzer Daten ausschneiden, kopieren und einfügen. Zwischenablageaktionen können innerhalb einer App oder zwischen unterschiedlichen Apps auf demselben Computer auftreten. Mit der Zwischenablage können Benutzer auf einfache Weise die benötigten Informationen am gewünschten Ort nutzen.

Es gibt mehrere Möglichkeiten für das Teilen von Daten.

Bevor wir das Hinzufügen von Zwischenablageaktionen zu Ihrer App erklären, sollten Sie wissen, dass Windows 8 verschiedene Möglichkeiten für das Kopieren von Daten bietet. Eine Übersicht über diese Verfahren finden Sie unter Freigeben und Austauschen von Daten. Teilen als eine der Methoden hat viele Gemeinsamkeiten mit der Zwischenablage. Aus Entwicklersicht verwenden das Teilen und Zwischenablageaktionen denselben Windows-Namespace: Windows.ApplicationModel.DataTransfer. Außerdem muss Ihre App für beide Vorgänge die vom Benutzer ausgewählten Daten erfassen. (Dies wird oft als Verpacken bezeichnet, da Sie hierfür die DataPackage-Klasse verwenden.) Aus Benutzerperspektive stellt die Zwischenablage den "herkömmlichen" Weg für das Kopieren von Daten dar.

Sie sollten als Entwickler berücksichtigen, dass das Teilen und Zwischenablageaktionen trotz aller Gemeinsamkeiten auch wichtige Unterschieden aufweisen. Beim Teilen liegt der Fokus auf der App oder dem Dienst, die bzw. den der Benutzer auswählt. Bei der Zwischenablage liegt der Fokus mehr auf den Daten. Am wichtigsten ist jedoch, dass Zwischenablageaktionen die einzige Möglichkeit darstellen, Daten zwischen einer Desktop-App und einer Windows Store-App auszutauschen. Das Teilen wird von Desktop-Apps nicht unterstützt.

Weitere Informationen zu den Unterschieden zwischen dem Teilen und Zwischenablageaktionen finden Sie unter Freigeben und Austauschen von Daten.

Integrierte Unterstützung für die Zwischenablage

In vielen Fällen müssen Sie keinen Code für die Unterstützung von Zwischenablageaktionen schreiben. Viele der Steuerelemente, die Sie beim Erstellen Ihrer Windows Store-App verwenden können, unterstützen bereits Zwischenablageaktionen. Weitere Informationen zu den verfügbaren Steuerelementen finden Sie unter Hinzufügen von Steuerelementen und Inhalten.

Vorbereitung

Das Hinzufügen einer Unterstützung für Zwischenablageaktionen zu Ihrer App ist einfach. Lesen Sie zunächst Richtlinien und Prüfliste für Befehle der Zwischenablage. Sie finden dort zahlreiche Informationen, die Ihnen beim Optimieren der Benutzerfreundlichkeit bei Zwischenablageaktionen helfen, sowie einige Hinweise zur Verbesserung Ihres Codes.

Anschließend sollten Sie überlegen, welche Datenformate Sie unterstützen möchten. Unter Windows 8 gibt es zwei Kategorien von Formaten: Standardformate und benutzerdefinierte Formate. Zu den Standardformaten gehören zurzeit:

  • Text
  • HTML
  • URI
  • Bitmaps
  • StorageItems
  • RTF

Ein Beispiel für Zwischenablageaktionen, die diese Datenformate nutzen, finden Sie in unserem Codebeispiel. Lesen Sie auch das Referenzthema zur StandardDataFormats-Klasse, die Sie zum Angeben der von Ihrer App unterstützten Formate verwenden.

Benutzerdefinierte Datenformate sind, wie der Name vermuten lässt, Formate von Daten, die keinem der Standardformate entsprechen. Diese Formate entsprechen häufig logischen Datensammlungen – z. B. einer Adresse oder einem Ereignis. Zur Unterstützung von benutzerdefinierten Formaten sollten Sie unbedingt eines der vielen Schemas unter schema.org verwenden. Durch die Verwendung allgemein bekannter Datenformate, wie diese Schemas, können Sie sicherstellen, dass die App die aus der Zwischenablage empfangenen Daten auch verarbeiten kann.

Erste Schritte

Die Unterstützung von Zwischenablageaktionen umfasst i. d. R. zwei Aspekte: Kopieren (oder Ausschneiden) und Einfügen. Erfahren Sie zunächst, wie Sie das Kopieren und Ausschneiden behandeln. Stellen Sie im ersten Schritt sicher, dass Ihre App über die erforderlichen Verweise verfügt. Wenn Sie eine Microsoft Visual Studio-Vorlage verwenden, werden diese Verweise direkt beim Erstellen eines neuen Projekts eingefügt. Wenn Sie nicht Visual Studio verwenden, müssen Sie Ihrer App Zugriff auf den Windows.ApplicationModel.DataTransfer-Namespace geben.


using Windows.ApplicationModel.DataTransfer;


Nach der Einrichtung Ihres Projekts benötigen Sie eine Instanz des DataPackage-Objekts. Dieses Objekt enthält sowohl die vom Benutzer kopierten Daten als auch alle Eigenschaften (z. B. eine Beschreibung), die Sie einfügen möchten.


DataPackage dataPackage = new DataPackage();


Kopieren und Ausschneiden

Sie können nun die Zwischenablageaktion angeben, die Sie durchführen möchten. Sie finden diese Aktionen über die DataPackageOperation-Enumeration. So gehen Sie beim Kopieren vor:


dataPackage.RequestedOperation = DataPackageOperation.Copy;


Und dies ist das Verfahren für das Ausschneiden (auch als Verschieben bezeichnet):


dataPackage.RequestedOperation = DataPackageOperation.Move;


Sie können nun die vom Benutzer ausgewählten Daten in das DataPackage-Objekt einfügen. Wenn die Daten von der DataPackage-Klasse unterstützt werden, können Sie die entsprechenden Methoden aus dem DataPackage-Objekt verwenden. So fügen Sie z. B. Text hinzu:


dataPackage.SetText("Hello World!");


So fügen Sie z. B. HTML mit eingebetteten Bildern hinzu:


string htmlFormat = HtmlFormatHelper.CreateHtmlFormat(this.htmlFragment);
var dataPackage = new DataPackage();
dataPackage.SetHtmlFormat(htmlFormat);

// Populate resourceMap with StreamReference objects corresponding to local 
// image files embedded in HTML.
var imgUri = new Uri(imgSrc);
var imgRef = RandomAccessStreamReference.CreateFromUri(imgUri);
dataPackage.ResourceMap[imgSrc] = imgRef;

Beispiele für das Hinzufügen anderer Formate zum DataPackage finden Sie im Zwischenablagebeispiel in der Codegalerie. Sie können DataPackage übrigens mehrere Formate hinzufügen.

Zuletzt müssen Sie das DataPackage in die Zwischenablage einfügen. Rufen Sie dafür die statische Clipboard.SetContent-Methode auf.


Clipboard.SetContent(dataPackage);


Einfügen

Rufen Sie zum Abrufen des Zwischenablageinhalts die statische Clipboard.GetContent-Methode auf. Die Methode gibt eine DataPackageView mit dem Inhalt zurück. Dieses Objekt ist mit dem DataPackage-Objekt nahezu identisch, lediglich der Inhalt ist schreibgeschützt. Anhand dieses Objekts können Sie dann entweder mit der AvailableFormats-Methode oder mit der Contains-Methode ermitteln, welche Formate verfügbar sind. Rufen Sie anschließend die entsprechende DataPackageView-Methode auf, um die Daten abzurufen. Mit dem folgenden Beispiel rufen Sie den in der Zwischenablage gespeicherten Text ab:


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
    // with a name of "TextOutput".
    TextOutput.Text = "Clipboard now contains: " + text;
}


Im folgenden Beispiel wird veranschaulicht, wie HTML aus der Zwischenablage abgerufen wird.

HTML von einer anderen App ist nicht vertrauenswürdig. Deshalb sollten Sie HTML nur anzeigen, wenn Sie sicher sind, dass keine dynamischen Inhalte enthalten sind. Mithilfe der DataTransfer.HtmlFormatHelper.GetStaticFragment-Methode können Sie freigegebene HTML-Inhalte ohne dynamische Elemente wie Skripttags abrufen.



var dataPackageView = Clipboard.GetContent();
if (dataPackageView.Contains(StandardDataFormats.Html))
{
    string htmlFormat = null;
    try
    {
        htmlFormat = await dataPackageView.GetHtmlFormatAsync();
    }
    catch (Exception ex)
    {
        rootPage.NotifyUser("Error retrieving HTML format from Clipboard: " + ex.Message, NotifyType.ErrorMessage);
    }

    if (htmlFormat != null)
    {
        string htmlFragment = HtmlFormatHelper.GetStaticFragment(htmlFormat);
        OutputHtml.NavigateToString("Html:<br/ > " + htmlFragment);
    }
}
else
{
    OutputHtml.NavigateToString("Html:<br/ > HTML format is not available in clipboard");
}

Nachverfolgen von Änderungen an der Zwischenablage

Neben den Befehlen für das Kopieren und Einfügen ist möglicherweise auch das Hinzufügen eines Ereignishandlers sinnvoll, der Ihre App über Änderungen an der Zwischenablage informiert. Behandeln Sie dafür das ContentChanged-Ereignis der Zwischenablage.

Fügen Sie zunächst einen Ereignishandler für das Clipboard.ContentChanged-Ereignis hinzu.


Clipboard.ContentChanged += new EventHandler<object>(this.TrackClipboardChanges_EventHandler);


Implementieren Sie anschließend die Ereignishandlermethode.


private async void TrackClipboardChanges_EventHandler(object sender, object 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
        // with a name of "TextOutput".
        TextOutput.Text = "Clipboard now contains: " + text;
    }
}


Mithilfe dieses Handlers wird Ihre App über jede Änderung am Inhalt der Zwischenablage informiert.

Nächste Schritte

Sie verfügen nun über grundlegende Kenntnisse über das Hinzufügen der Unterstützung von Zwischenablageaktionen zu Ihrer App. Lesen Sie auch Richtlinien und Prüfliste für Befehle der Zwischenablage, um die Benutzerfreundlichkeit zu steigern. Sie können auch unser Beispiel herunterladen (in der Codegalerie), das verschiedene Beispiele für die Verwendung der Zwischenablage enthält.

 

 

Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.