This article has been localized into Turkish by the community.
StringFormat Özelliği
Önceki bölümlerde gördüğümüz gibi bir veri bağlamada değeri göstermeden önce tipik olarak bir dönüştürücü kullanarak değeri işliyoruz. Dönüştürücülerin güzel yanı her türlü veri tipinden herhangi tamamen farklı bir tipe dönüştürebilmesidir. Bununla beraber daha basit senaryolar için , mesela sadece veriyi göstermek istiyorsunuz aslında dönüştürmek değil, StringFormat özelliği çok işinize yarayacaktır.
StringFormat özelliği kullandığınızda veri bağlamanızda dönüştürücü kullanmaya göre esnekliğinizi kaybedersiniz ama sonuçta kullanımı çok daha basittir ve kodunuza yeni bir sınıf tanımı eklemeniz gerekmez.
StringFormat özelliği adının dediğini yapar : çıktı yazının şeklini String.Format metodunu çağırarak belirtir. Bazen bir örnek binlerce kelimeden fazla şey anlatır, öyleyse kelimeleri saymadan önce direk bir örneğe dalalım :
<Window x:Class="WpfTutorialSamples.DataBinding.StringFormatSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="StringFormatSample" Height="150" Width="250"
Name="wnd">
<StackPanel Margin="10">
<TextBlock Text="{Binding ElementName=wnd, Path=ActualWidth, StringFormat=Window width: {0:#,#.0}}" />
<TextBlock Text="{Binding ElementName=wnd, Path=ActualHeight, StringFormat=Window height: {0:C}}" />
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, StringFormat=Date: {0:dddd, MMMM dd}}" />
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, StringFormat=Time: {0:HH:mm}}" />
</StackPanel>
</Window>
İlk çift TextBlock değerlerini içinde oldukları pencereden alır ve genişlik ile yüksekliği alır. StringFormat özelliği değerine göre değerlerin gösterim şekli belirlenir. Genişlik için özel formatlı bir string belirttik, yükseklik için ise para birimi formatında olmasını belirttik, sadece eğlenmek için. Değer double tipinde olduğu için double.ToString() metodu çağırırken kullanabileceğimiz tüm yazım şekillendiricileri kullanabiliriz. Bir listesini şurada bulabilirsiniz : http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
Ayrıca StringFormat değerini verirken isteğe bağlı yazıları nasıl verdiğime dikkat edin - bu şekilde değerlerin önüne/arkasına yazılar ekleyebilirsiniz. Format yazısı içinde değerlere referans vermek için iki değer içeren süslü parantez kullanırız : İlki şekil vermek istediğimiz değer (sayı 0 değeri, ilk mümkün olan değer) ve arkasından iki nokta üst üste karakteri ile ayrılmış gösterim formatı string'i.
Son iki örnekte bulunulan zamanın bilgilerine veri bağlaması yaptık (DateTime.Now), ve önce tarih bilgisini belirli bir formatta gösterdik , sonra da saat bilgisini (saat ve dakika olarak) gösterdik. TarihZaman (DateTime) gösterim formatları hakkında bilgi burada bulabilirsiniz : http://msdn.microsoft.com/en-us/library/az4se3k1.aspx
Haricinde başka yazı olmadan şekillendirmek
Lütfen şunu aklınızdan çıkarmayın, eğer yukarıdaki örneklerdeki gibi değer dışında ilave yazılar olmayacaksa, XAML kodu yazarken extra bir set daha süslü paranteze ihtiyacınız olacaktır. Bunun sebebi aksi durumda WPF'in kafasının karışacağıdır. Bir örnekle görelim :
<Window x:Class="WpfTutorialSamples.DataBinding.StringFormatSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="StringFormatSample" Height="150" Width="250"
Name="wnd">
<WrapPanel Margin="10">
<TextBlock Text="Width: " />
<TextBlock Text="{Binding ElementName=wnd, Path=ActualWidth, StringFormat={}{0:#,#.0}}" />
</WrapPanel>
</Window>
Belirli bir kültürü kullanmak
Bir bağlanmış veriyi belirli bir kültüre göre göstermek isterseniz bu da sorun değil. Binding üst elemanına tanımlı olan dili kullanacaktır, veya siz direk olarak Binding için ConverterCulture özelliğini kullanarak bir kültür belirtebilirsiniz. İşte bir örnek :
<Window x:Class="WpfTutorialSamples.DataBinding.StringFormatCultureSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="StringFormatCultureSample" Height="120" Width="300">
<StackPanel Margin="10">
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, ConverterCulture='de-DE', StringFormat=German date: {0:D}}" />
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, ConverterCulture='en-US', StringFormat=American date: {0:D}}" />
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}, ConverterCulture='ja-JP', StringFormat=Japanese date: {0:D}}" />
</StackPanel>
</Window>
Oldukça basit : D direktifi (uzun tarih gösterim paterni) kullanan StringFormat özelliğini ConverterCulture özelliği ile birlikte kullanarak bağlanan veriler belirtilen kültüre göre gösterilir. Oldukça şık!