This article has been localized into Turkish by the community.
TextBlock Kontrol - Satır içi Şekillendirme
Önceki makalede TextBlock kontrolünün temel çalışmasını inceledik. Basit bir yazıyı göstermek ve eğer gerekirse kaydırma yapmak. Ayrıca yazının rengini default başka renk de kullandık, ama ya TextBlock içindeki tüm yazı için sabit bir renkten fazlasını yapmak istiyorsanız?
Neyse ki TextBlock kontrolü satır içi elemanları destekliyor. Bu küçük bir kontrol benzeri yapıların tamamı Inline sınıfından türetilmiştir ve büyük bir yazının parçası olarak satır içinde yayınlanabilirler. Desteklenen elemanlar AnchoredBlock, Bold, Hyperlink, InlineUIContainer, Italic, LineBreak, Run, Span, ve Underline elemanlarıdır. Takip eden örneklerde bunların çoğunu göreceğiz.
Bold, Italic ve Underline elemanları
Bunlar olasıdır ki en basit satır içi eleman tipleri. İsimleri size ne iş yaptıklarına dair çok şey anlatıyor, fakat küçük bir örnekle ne işe yaradıklarını görelim :
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockInlineSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockInlineSample" Height="100" Width="300">
<Grid>
<TextBlock Margin="10" TextWrapping="Wrap">
TextBlock with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> text.
</TextBlock>
</Grid>
</Window>
HTML koda benzer şekilde koyu yazı için yazıyı bir Bold tag ile çevreliyorsunuz vb. Bu uygulamanızda yazıları farklı şekillerde göstermek için çok kolay bir yol.
Tüm bu üç Tag aslında Span elemanının alt sınıfları, her biri Span elemanı içeriğine istenen efekti ayarlamakta kullanılır. Örneğin Bold tag'i sadece Span elemanının FontWeşght özelliğini ayarlar, Italic elemanı FontStyle özelliğini ayarlar gibi.
LineBreak elemanı
Basitçe , yazıya bir satır sonu ekler (alt satıra geçmesini sağlar). Önceki bölümde örnekte kullanmıştık bu LineBreak elemanını.
Hyperlink elemanı
Hyperlink elemanı yazıya bağlantı (web bağlantısı) eklemenizi sağlar. Görünümü kullandığınız Windows standartlarına göre olur, genellikle altı çizili üzerine gelince kırmızı olan ve mouse işaretçinin üzerinde parmak şekline geldiği bir mavi renk yazıdır. NavigateUri özelliği ile hangi URL'e bağlanacağı belirtilir. İşte bir örnek :
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockHyperlinkSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockHyperlinkSample" Height="100" Width="300">
<Grid>
<TextBlock Margin="10" TextWrapping="Wrap">
This text has a <Hyperlink RequestNavigate="Hyperlink_RequestNavigate" NavigateUri="https://www.google.com">link</Hyperlink> in it.
</TextBlock>
</Grid>
</Window>
Hyperlink ayrıca sayfalar arasında gezinmek için WPF sayfalarında kullanılabilir. Bu durumda önceki örnekteki gibi ayrıca RequestNavigate olayını işlemeniz gerekmez. Fakat bir WPF uygulamasından harici adreslere gidebilmek için bu olaydan ve Process sınıfından yararlanmamız gerekir. Default tarayıcımızda istenen URL adresini açmak için RequestNavigate olayı işleyicisini arkaplan koduna eklemeliyiz.
private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
System.Diagnostics.Process.Start(e.Uri.AbsoluteUri);
}
Run elemanı
Run elemanı ile Span elemanının tüm özelliklerini kullanarak yazıya şekil verebiliriz, ama Span elemanı içinde başka elemanlar barındırabilirken Run elemanı içinde sadece düz yazı olabilir. Bu durum Span elemanını bir çok durumda daha esnek yapar ve bu yüzden çoğunlukla mantıklı tercihtir.
Span elemanı
Span elemanı default olarak özel bir görünüm vermez, fakat font boyutu, stil, koyuluk, arka renk , ön renk vb bir çok özelliği belirtmenize yarar. Span elemanının önemli özelliği ise yazı ve stilleri ayrıntılı işleyebilecek şekilde içinde diğer elemanları da barındırabilmesidir. Sıradaki örnekte size satır içi Span elemanı kullanarak yapılabilecek bir çok şeyi gösteren Span elemanları var :
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSpanSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSpanSample" Height="100" Width="300">
<Grid>
<TextBlock Margin="10" TextWrapping="Wrap">
This <Span FontWeight="Bold">is</Span> a
<Span Background="Silver" Foreground="Maroon">TextBlock</Span>
with <Span TextDecorations="Underline">several</Span>
<Span FontStyle="Italic">Span</Span> elements,
<Span Foreground="Blue">
using a <Bold>variety</Bold> of <Italic>styles</Italic>
</Span>.
</TextBlock>
</Grid>
</Window>
Böylece göreceğiniz üzere yazınızı şekillendirmeye başlarken eğer diğer elemanlar mantıklı gelmiyorsa veya sadece boş bir içerikle başlamak istiyorsanız Span elemanı en doğru çözüm olacaktır.
C# Arkaplan kodundan yazıyı şekillendirmek
Göründüğü üzere XAML içinde yazıyı şekillendirmek oldukça kolay, fakat bazı durumlarda bu şekillendirmeyi C# arkaplan kaodunda yapmanız gerekebilir. Bu çok külfetli bir iş ama bu örnek nasıl yapılabileceğini gösteriyor :
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockCodeBehindSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockCodeBehindSample" Height="100" Width="300">
<Grid></Grid>
</Window>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
namespace WpfTutorialSamples.Basic_controls
{
public partial class TextBlockCodeBehindSample : Window
{
public TextBlockCodeBehindSample()
{
InitializeComponent();
TextBlock tb = new TextBlock();
tb.TextWrapping = TextWrapping.Wrap;
tb.Margin = new Thickness(10);
tb.Inlines.Add("An example on ");
tb.Inlines.Add(new Run("the TextBlock control ") { FontWeight = FontWeights.Bold });
tb.Inlines.Add("using ");
tb.Inlines.Add(new Run("inline ") { FontStyle = FontStyles.Italic });
tb.Inlines.Add(new Run("text formatting ") { Foreground = Brushes.Blue });
tb.Inlines.Add("from ");
tb.Inlines.Add(new Run("Code-Behind") { TextDecorations = TextDecorations.Underline });
tb.Inlines.Add(".");
this.Content = tb;
}
}
}
Bazı durumlarda gerektiğinde bu şekilde yapma olasılığının olması güzel ancak bu örnek büyük ihtimal sizi XAML değerini daha iyi anlamaya yöneltir.