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

0 dakikada yazıldı

8153 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 ;)