Silverlight 5 Beta'da Karater Aralığı ve RichTextboxOverflow

0 dakikada yazıldı

8141 defa okundu

Düzenle

İtiraf etmem gerek ki Silverlight'ın metin gösterme konusunda özellikleri gerçekten çok yavaş gelişti. Richtextbox'ın çok uzun bir süreden sonra geldiğini düşünürsek şimdi bahsedeceğimiz özelliğin de özünde epey geciktiğini söyleyebilirim. Fakat sonuç itibari ile :) hiç gelmemesinden iyidir diyerek konumuza devam edelim :)

Silverlight 5 Beta ile beraber metin gösterimi konusunda özünde gelen iki yenilik var. Bunlardan biri artık metin içinde karakterler arası mesafeyi düzenleyebiliyor hatta anime edebiliyor olmamız. İkincisi ise bir metnin akışını sağlayacak şekilde aynı ekranda birden çok kontrolü birbirine bağlayabiliyor olmamız. Bu durum özellikle metnin font ve metin aralığının dinamik olduğu senaryolardan çok değerli oluyor. Gelin şimdi örneklerle neler olduğuna bir bakalım.

Karakter aralığını değiştirmenin basit yolu....

Herhangi bir TextBlock içerisinde gösterdiğiniz metin basit bir şekilde karakter aralığını belirtmek için CharacterSpacing attribute'ü kullanabilirsiniz. İşin güzel tarafı daha önce de bahsettiğimiz gibi bu property'yi anime etme şansınız da var.

[XAML]

     \<TextBlock Margin="88,96,110,138" \                    TextWrapping="Wrap" \                    Text="Örnek bir metin!" \                    CharacterSpacing="204"/>

Yeni bir kontrol : RichTextBoxOverflow

Uzun uzun metinler gösteren uygulamalar yapmayı planlıyorduysanız size güzel bir haberim var. İster bir online e-book reader yazın ister basit bir RSS reader artık elinizdeki uzun metinleri istediğiniz gibi kolonlara bölebilir ve metinlerin ekranda bir alandan diğer alana otomatik akmasını sağlayabilirsiniz. Bu işlevselliğe ulaşabilmek için artık elimizde yeni bir kontrol var, adı da RichTextBoxOverflow.

[XAML]

    \<Grid x:Name="LayoutRoot" Background="White">\         \<RichTextBox x:Name="RT1" Height="110" Margin="25,22,188,0" \                      VerticalAlignment="Top" \                      OverflowContentTarget="{Binding ElementName=RT2}"/>\         \<RichTextBoxOverflow x:Name="RT2" Height="104" \                              Margin="194,0,38,30" \                              VerticalAlignment="Bottom"/>\     \Grid\>

Yukarıdaki kod içerisinde de görebileceğiniz gibi ilk olarak sahnede normal bir RichTextBox var. Elimizdeki tüm metni bu RichTextBox'a veriyoruz. RichTextBox'ın içine sığmayan metnin otomatik olarak RichTextBoxOverflow kontrolüne akmasını sağlamak için Overflow kontrolünü normal RichTextBox'ın OverflowContentTarget özelliğine bind ediyoruz. İşte bu kadar :)

RichTextBoxOverflow'lar arka
arkaya...RichTextBoxOverflow'lar arka arkaya...

Bu şekilde istediğiniz kadar RichTextBoxOverflow kontrolünü birbirine bağlayabilirsiniz. Metin sırası ile tüm kontrolü gezerek dağılacaktır / akacaktır. Metnin puntosunu veya belki de karakter aralığını anime ettiğinizde flow'un da değişiyor olması hoş bir manzara yaratmıyor desem yalan olur :)

[XAML]

        \<RichTextBox x:Name="RT1" Height="110" Margin="25,22,188,0" \                      VerticalAlignment="Top" \                      OverflowContentTarget="{Binding ElementName=RT2}"/>\         \<RichTextBoxOverflow x:Name="RT2" \                              Margin="185,145,47,51"\                              OverflowContentTarget="{Binding ElementName=RT3}"/>\         \<RichTextBoxOverflow x:Name="RT3" Height="104" \                              Margin="0,0,0,8" \                              VerticalAlignment="Bottom" \                              HorizontalAlignment="Left" Width="168"/>

Eğer metin üzerinde bir selection editin veya font ile ilgili ayarlar yapacaksanız tüm bu ayarları ilk RichTextBox üzerinden yapmanız gerekiyor. Tüm bu ayarlar otomatik olarak gerektiğinde (Yani etilenen metin kısmı diğer kontrollerin alanına denk geliyorsa) RichTextBoxOverFlow kontrollerine aktarılacaktır.

Hepinize kolay gelsin ;)