XAML kullanmanın en güzel taraflarından birisi belki de property’lere gerekli değerleri hangi tip olursa olsun, string tipinde veriyor olmamızdır. Peki XAML bunu nasıl çözümlüyor hiç merak ettiniz mi?

XAML çözümlemeyi nasıl yapıyor?

XAML parser tüm xaml’ı kontrol ederken property üzerinde TypeConverterAttribute niteliğinin varlığını kontrol eder. Bu nitelik sayesinde belirtilen değer uygun tipe dönüştürülürken hangi dönüştürücü sınıfının kullanılacağını anlar. Eğer kontrol sırasında bir nitelik bulursa, converter sınıfını örnekler ve uygun convert işlemi için kullanır.

Kod tarafında aynı senaryoyu uygulayabilir miyiz?

Kod tarafında da aşağıdaki gibi TypeConverter sınıfını kullanarak aynı şekilde property lere string tipinde değerler verip uygun tiplere dönüştürülmesini sağlayabiliriz.

[XAML]

<Window x:Class="XmlParse.MainWindow"  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <TextBlock x:Name="txtMessage" Text="Hello world!" />
        </StackPanel>
    </Grid>
</Window>

  [C#]

void MainWindow_Loaded(object sender, RoutedEventArgs e)  
        {
            txtMessage.Foreground = MyConverter<SolidColorBrush>("Green");
        }       

        public T MyConverter<T>(string stringValue)
        {
            TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(T));

            if (typeConverter != null)
                return (T)typeConverter.ConvertFromString(stringValue);
            else
              throw new Exception("Dönüştürme işlemi için uygun converter bulunamadı.");
        }

Hepinize kolay gelsin.

About the Author