Taaa Silverlight 1.0 zamanında Clipboard erişimi ile ilgili bir
makale yazmıştım. Aradan bir buçuk yıl geçmiş :) Silverlight 4 Beta ile
beraber Clipboard erişimi artık default olarak geliyor. Böylece rahatlıkla
JavaScript mile uğraşmadan C# veya VB kodunuz ile Clipboard'a ulaşabilir, veri
alabilir veya verebilirsiniz.
Bakalım Clipboard'da birşey var mı?
Clipboard'dan birşey almadan önce birşey olup olmadığını kontrol etmek gerek.
Şu an için Silverlight 4 Beta'da Clipboard erişlimi olarak sadece Unicode metin
desteği var. O nedenle kullanacağımız tüm API'lerde de bu izi rahatlıkla
görebilirsiniz.
[XAML]
<UserControl x:Class="SilverlightApplication8.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<Button x:Name="btnKes" Content="Kes" />
<Button x:Name="btnYapistir" Content="Yapıştır" />
<TextBox x:Name="txtMetin" />
</StackPanel>
</Grid>
</UserControl>
Yukarıdaki XAML kodu örnek uygulamamızın arayüzüne ait. Arayüzde basit birer
Kes ve Yapıştır düğmelerinin yanı sıra bir de TextBox yer alıyor. Amacımız
sistem clipboardundaki veriyi bu textbox içerisine yapıştırmak veya textbox
içerisinden bir metni kesip aynı şekilde clipboarda yerleştirmek.
[VB]
Private Sub btnYapistir_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnYapistir.Click
If Clipboard.ContainsText Then
txtMetin.Text = Clipboard.GetText
End If
End Sub
Yapıştır düğmemizin arkasında hemen Clipboard sınıfındaki
shared metodlardan ContainsText'i kullanarak Clipboard
içerisinde bir metin olup olmadığını kontrol edebiliyoruz. Sonrasında eğer metin
varsa rahatlıkla bu metni de GetText ile alabiliyoruz.
[VB]
Private Sub btnKes_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnKes.Click
Clipboard.SetText(txtMetin.SelectedText)
txtMetin.Text = txtMetin.Text.Remove(txtMetin.SelectionStart, txtMetin.SelectionLength)
End Sub
Sıra kesme işlemine yani Clipboard'a data aktarmaya gelince
de yine Clipboard sınıfı altındaki SetText
metodunu kullanabiliriz. Söz konusu metod parametre olarak Clipboard'a aktarmak
istediğimiz yazıyı alıyor. Tabi söz konusu yazıyı Clipboard'a yerleştirdikten
sonra TextBox'tan da kaldırmanın uygun olacağını düşündüm :) O nedenle bir
sonraki satırı da keyfi olarak ekledim diyebilirim.

Clipboard erişimi hakkı!
Uygulamanız ilk Clipboard erişimine el attığı anda :) kullanıcıya yukarıdaki
gibi bir uyarı penceresi gösterilecektir. Bu pencere ile kullanıcı uygulamanıza
Clipboard erişimi izni verebilir. Eğer izin verilir ise uygulama söz konusu
session boyunca bu izne sahip olacaktır. Eğer izin verilmez ise kodunuz bir
Exception verecektir. O nedenle erişim kodlarınızı Try/Catch blokları içerisinde
tutup hataya göre yol almak uygun olabilir.
Hepinize kolay gelsin.