diff --git a/samples/ControlCatalog/MainView.xaml b/samples/ControlCatalog/MainView.xaml
index 3d869bb723..9e020f5b69 100644
--- a/samples/ControlCatalog/MainView.xaml
+++ b/samples/ControlCatalog/MainView.xaml
@@ -40,6 +40,9 @@
+
+
+
diff --git a/samples/ControlCatalog/Pages/ClipboardPage.xaml b/samples/ControlCatalog/Pages/ClipboardPage.xaml
new file mode 100644
index 0000000000..4199a9780f
--- /dev/null
+++ b/samples/ControlCatalog/Pages/ClipboardPage.xaml
@@ -0,0 +1,23 @@
+
+
+ Example of ClipboardPage capabilities
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs b/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs
new file mode 100644
index 0000000000..16833480c6
--- /dev/null
+++ b/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Input;
+using Avalonia.Interactivity;
+using Avalonia.Markup.Xaml;
+
+namespace ControlCatalog.Pages
+{
+ public partial class ClipboardPage : UserControl
+ {
+ public ClipboardPage()
+ {
+ InitializeComponent();
+ }
+
+ private TextBox ClipboardContent => this.Get("ClipboardContent");
+
+ private void InitializeComponent()
+ {
+ AvaloniaXamlLoader.Load(this);
+ }
+
+ private async void CopyText(object sender, RoutedEventArgs args)
+ {
+ await Application.Current.Clipboard.SetTextAsync(ClipboardContent.Text);
+ }
+
+ private async void PasteText(object sender, RoutedEventArgs args)
+ {
+ ClipboardContent.Text = await Application.Current.Clipboard.GetTextAsync();
+ }
+
+ private async void CopyTextDataObject(object sender, RoutedEventArgs args)
+ {
+ var dataObject = new DataObject();
+ dataObject.Set(DataFormats.Text, ClipboardContent.Text);
+ await Application.Current.Clipboard.SetDataObjectAsync(dataObject);
+ }
+
+ private async void PasteTextDataObject(object sender, RoutedEventArgs args)
+ {
+ ClipboardContent.Text = (string)await Application.Current.Clipboard.GetDataAsync(DataFormats.Text);
+ }
+
+ private async void CopyFilesDataObject(object sender, RoutedEventArgs args)
+ {
+ var dataObject = new DataObject();
+ dataObject.Set(DataFormats.FileNames, ClipboardContent.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));
+ await Application.Current.Clipboard.SetDataObjectAsync(dataObject);
+ }
+
+ private async void PasteFilesDataObject(object sender, RoutedEventArgs args)
+ {
+ var fiels = (IEnumerable)await Application.Current.Clipboard.GetDataAsync(DataFormats.FileNames);
+ ClipboardContent.Text = string.Join(Environment.NewLine, fiels);
+ }
+
+ private async void GetFormats(object sender, RoutedEventArgs args)
+ {
+ var formats = await Application.Current.Clipboard.GetFormatsAsync();
+ ClipboardContent.Text = string.Join(Environment.NewLine, formats);
+ }
+
+ private async void Clear(object sender, RoutedEventArgs args)
+ {
+ await Application.Current.Clipboard.ClearAsync();
+ }
+ }
+}
diff --git a/samples/ControlCatalog/Pages/DragAndDropPage.xaml b/samples/ControlCatalog/Pages/DragAndDropPage.xaml
index 1bf8bfa99b..3f8a023060 100644
--- a/samples/ControlCatalog/Pages/DragAndDropPage.xaml
+++ b/samples/ControlCatalog/Pages/DragAndDropPage.xaml
@@ -11,7 +11,13 @@
Padding="16"
BorderBrush="{DynamicResource SystemAccentColor}"
BorderThickness="2">
- Drag Me
+ Drag Me (text)
+
+
+ Drag Me (files)
d.Set(CustomFormat, "Test123"), DragDropEffects.Move);
+ SetupDnd("Files", d => d.Set(DataFormats.FileNames, new[] { Assembly.GetEntryAssembly()?.GetModules().FirstOrDefault()?.FullyQualifiedName }), DragDropEffects.Copy);
}
void SetupDnd(string suffix, Action factory, DragDropEffects effects)