Silverlight 2.0 içerisinde asenkron font dosyası indirerek kullanmak

0 dakikada yazıldı

5776 defa okundu

Düzenle

Silverlight 1.0 ile beraber istemci tarafında herhangi bir font
yüklemesi olmadan istediğimiz fontları TextBlock ve TextBox gibi
kontrollerde kullanabilir hale gelmiştik. Silverlight 2.0 tarafında
gelen yeniliklerle beraber artık her şeyi VB veya C# kodumuz ile
halletmemiz gerekiyor. Bu yazımızda Silverlight 2.0 ile beraber özel
font kullanımını inceleyeceğiz.

Sunucudan asenkron font indirerek kullanmak

Sunucudaki istediğimiz bir fontu asenkron olarak istemci tarafına
indirip istediğimiz kontrollere bağlayabiliriz. Böylece gerekli fontları
sadece gerekli olduğunda istemci tarafına taşımış oluruz. Bunun için
Silverlight 2.0 tarafında bir WebClient nesnesi kullanarak ilk
olarak font dosyasını istemci tarafına indirmemiz gerekiyor.

[VB]

    Private Sub Page_Loaded(ByVal sender As Object,
ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded

        Dim Yukleme As New
WebClient

        AddHandler
Yukleme.OpenReadCompleted, AddressOf
Yukleme_OpenReadCompleted

        Yukleme.OpenReadAsync(New
Uri("/SilverlightApplication33Web/deveload.ttf",
UriKind.Relative))

    End Sub

[C#]

        public Page()

        {

            InitializeComponent();

 

            WebClient Yukleme =
new WebClient();

            Yukleme.OpenReadCompleted += new OpenReadCompletedEventHandler(Yukleme_OpenReadCompleted);

            Yukleme.OpenReadAsync(new
Uri("/SilverlightApplication34Web/deveload.ttf",
UriKind.Relative));

        }

Kodumuzda Silverlight uygulaması yüklendiği gibi hemen bir WebClient
nesnesi yaratarak ardından OpenReadCompleted event'ı için dinamik
bir event handler bağlıyoruz. Söz konusu event handler WebClient
nesnesinin sunucudan aldığı dosyanın download işlemi bittiğinde
çalıştırılacak ve böylece biz de veri geldiğinde istediğimiz kontrole
bağlayabileceğiz. Event-handler bağlantısını da tamamladıktan sonra
OpenReadAsync ile sunucudan verimizi almaya başlıyoruz.

[VB]

    Private Sub Yukleme_OpenReadCompleted(ByVal sender As Object,
ByVal e As System.Net.OpenReadCompletedEventArgs)

        Label1.FontSource = New
FontSource(e.Result)

        Label1.FontFamily = New
FontFamily("DEVELOAD")

    End Sub

[C#]

        void
Yukleme_OpenReadCompleted(object
sender, OpenReadCompletedEventArgs
e)

        {

            Label1.FontSource = new
FontSource(e.Result);

            Label1.FontFamily = new
FontFamily("DEVELOAD");

        }

Veri sunucudan geldiğinde, download işlemi bittiğinde çalışan
event-handler içerisinde hemen elimizdeki TextBlock olan Label1
adındaki kontrolün FontSource özelliğini değiştiriyoruz.
Tanımladığımız yeni FontSource veri kaynağını e.Result ile
alıyor, yani WebClient'ın indirdiği Stream'i doğrudan FontSource'a
çevirerek TextBlock'a aktarıyoruz. Son olarak tabi ki TextBlock'un
FontFamily özelliğini de uygun şekilde değiştirmemiz gerek.

İsterseniz WebClient nesnesinin DownloadProgressChanged durumuna
da bir event-handlar bağlayarak Fontların yüklenmesi esnasında
yüklemenin ne kadarının tamamlandığını da takip edebilirsiniz.

Hepinize kolay gelsin.