Introduction

Copy and paste are used to share the data between apps, or within an app, and for almost all the platform-supported clipboard operations. So, in this article, we can learn how to achieve this functionality in Xamarin.Forms using DependencyServices concept.

Requirements

Description

Let's start

Step 1

First, follow the below steps to create a new Xamarin.Forms project.

Now, the project structure will be created like below.

  • ClipboardDemo
    It is for Shared Code

  • ClipboardDemo.Droid
    It is for Android.

  • ClipboardDemo.iOS
    It is for iOS

Portable Class Library(PCL)

Step 2

Create an interface IClipboardService inside the Interfaces folder and having method declaration of CopyToClipboard.

IClipboardService.cs

  1. namespace ClipboardDemo.Interfaces {
  2. public interface IClipboardService {
  3. void CopyToClipboard(string text);
  4. }
  5. }

Xamarin.Android

Create a class ClipboardService and you need to implement CopyToClipboard method like below.

ClipboardService.cs

  1. using System;
  2. using ClipboardDemo.Interfaces;
  3. using Xamarin.Forms;
  4. using Android.Content;
  5. using ClipboardDemo.Droid.DepencencyServices;

  6. [assembly: Dependency(typeof(ClipboardService))]
  7. namespace ClipboardDemo.Droid.DepencencyServices {
  8. public class ClipboardService: IClipboardService {
  9. public void CopyToClipboard(string text) {
  10. var clipboardManager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService);
  11. ClipData clip = ClipData.NewPlainText("Android Clipboard", text);
  12. clipboardManager.PrimaryClip = clip;
  13. }
  14. }
  15. }

Note
ClipData's purpose is a representation of clipped data on the clipboard. ClipData is a complex type containing one or more Item instances, each of which can hold one or more representations of an item of data. For displaying to the user, it also has a label.

Xamarin.iOS

In iOS also, we create a class ClipboardService and need to implement CopyToClipboard method like below.

ClipboardService.cs

  1. using ClipboardDemo.Interfaces;
  2. using Xamarin.Forms;
  3. using ClipboardDemo.iOS.Services;
  4. using UIkit;
  5. [assembly: Dependency(typeof(ClipboardService))]
  6. namespace ClipboardDemo.iOS.Services {
  7. public class ClipboardService: IClipboardService {
  8. public void CopyToClipboard(string text) {
  9. UIPasteboard clipboard = UIPasteboard.General;
  10. clipboard.String = text;
  11. }
  12. }
  13. }

Note
UIPasteboard is an object that helps a user share data from one place to another within your app, and from your app to other apps.

PCL

Create your own Xaml page named VersionAndBuildNumberPage.xaml.

ClipboardDemoPage.xaml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
  4. xmlns:local="clr-namespace:ClipboardDemo"
  5. BackgroundColor="White"
  6. x:Class="ClipboardDemo.ClipboardDemoPage">
  7. <StackLayout Padding="40, 60,40,0"
  8. VerticalOptions="FillAndExpand"
  9. HorizontalOptions="FillAndExpand">
  10. <Label
  11. Text="Copy and Paste"
  12. FontSize="25"
  13. FontAttributes="Bold"
  14. TextColor="#533F95"
  15. HorizontalOptions="CenterAndExpand" />
  16. <StackLayout
  17. VerticalOptions="CenterAndExpand"
  18. Spacing="40">
  19. <Entry
  20. Placeholder="Enter text"
  21. PlaceholderColor="#533F95"
  22. TextColor="#533F95"
  23. x:Name="ClipboardCopyText"
  24. HorizontalOptions="FillAndExpand"
  25. HeightRequest="45"
  26. VerticalOptions="StartAndExpand" />
  27. <Button
  28. Text="Copy To Clipboard"
  29. BackgroundColor="#533F95"
  30. TextColor="White"
  31. HorizontalOptions="FillAndExpand"
  32. HeightRequest="45"
  33. Clicked="Btn_CopyToClipboard_Click" />
  34. </StackLayout>
  35. </StackLayout>
  36. </ContentPage>

Call to DependencyService

Now, let us call the dependency service in the code behind under CopyToClipboard click event for copying the text to clipboard.

  1. var clipboardService = DependencyService.Get<IClipboardService>();
  2. clipboardService?.CopyToClipboard(ClipboardCopyText.Text);

ClipboardDemoPage.xaml.cs

  1. using System;
  2. using ClipboardDemo.Interfaces;
  3. using Xamarin.Forms;
  4. namespace ClipboardDemo {
  5. public partial class ClipboardDemoPage: ContentPage {
  6. public ClipboardDemoPage() {
  7. InitializeComponent();
  8. }
  9. private void Btn_CopyToClipboard_Click(object sender, EventArgs e) {
  10. if (!string.IsNullOrEmpty(ClipboardCopyText.Text)) {
  11. var clipboardService = DependencyService.Get < IClipboardService > ();
  12. clipboardService ? .CopyToClipboard(ClipboardCopyText.Text);
  13. DisplayAlert("ClipboardDemo", "Text copied!", "Ok");
  14. } else {
  15. DisplayAlert("ClipboardDemo", "Please enter the text", "Ok");
  16. }
  17. }
  18. }
  19. }

Note
In the above class, we are calling Clipboard Service and passing user entered text in ClipboardCopyText Entry.

Output

Please download the source code from here.