Visual Studio’da bir WPF projesi oluşturduğumuzda otomatik olarak karşımıza iki farklı dosya tipi oluşturmaktadır. Bunlardan birisi görsel elementleri yerleştirdiğimiz XAML dosyası diğeri ise mantıksal işlemler gerçekleştirdiğimiz, görsel kısımlara veri sağladığımız ya da görsel elementlerin durumlarını değiştirebildiğimiz code behind dosyası vardır. Mimari açıdan da öngörülen bu şekildedir çünkü tasarımcı ile geliştiricinin rollerinin belirginleşmesi açısından bu önemlidir. Tabi eğer bir çılgınlık yapıp görsel elementleri de kod tarafında dinamik olarak oluşturmuyorsanızJ

Bildiğiniz gibi XAML tarafındaki her bir element .NET nesnesi olduğu için kod tarafında da oluşturulup kullanılabilmektedir. Peki ya XAML tarafında arka plan kodu çalıştırmak istersek?

Neden gerek var?

Mimari açının öngördüğünün aksine neden böyle bir şeye gerek var diye düşünebilirsiniz. Çoğunlukla gerek olmamasının yanı sıra bazı durumlarda kullanılabilir. MVVM (Model-View-ViewModel ) desenin kurallarından birisi sıfır arka plan kodu olmasıdır. WPF’in güçlü data binding yapısı sayesinde bu kolaylıkla sağlanabilmektedir. Peki projemizde bir event handler çalıştırmak istersek? İşte bu noktada XAML tarafında arka plan kodu çalıştırmanın mantıklı bir sebebi ortaya çıkıyor.

Peki nasıl?

XAML tarafında  kod çalıştırabilmemiz için x:Code taglarını kullanmalıyız. Öncelikle bir WPF projesi oluşturup arkaplan kodu dosyasını projemizden siliyoruz. Daha sonra aşağıdaki gibi kodları XAML tarafına ekleyebiliyoruz. Unutulmaması gereken en önemli şeylerden birisi kodlarımızı <![CDATA[ ]]> arasında yazmamız gerektiğidir. Bu sayede XAML işleyicisi kodumuzu XML içerik olarak yorumlamayacak. Gelelim kodumuzu yazmaya:

<Window x:Class="Win7JumpList.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>            
       <TextBox x:Name="txtBox" Width="100" />
            <Button Width="133"
                    Height="24"
                    Name="btnGreeting"
                    Click="btnGreeting_Clicked"
                    Content="Greet!" />            
            <x:Code>
                <![CDATA[            
            private void btnGreeting_Clicked(object sender, RoutedEventArgs e)
            {
                txtBox.Text="Welcome guest!";
            }
        ]]>
            </x:Code>
         </StackPanel>
    </Grid>
</Window>

Gördüğünüz gibi arka plan kodlarını XAML tarafında çalıştırmak <x:Code><![CDATA[ ...]]></x:Code> tagları arasında eklemek kadar basit.

Sonuç

Her ne kadar XAML tarafında arka plan kodu çalıştırabilsek belirli kısıtlamalar mevcut. Yaşayacağınız en büyük eksiklik Intellisense özelliğinin olmaması. Tüm kodu teker teker yazmak zorundasınız J Bir diğer kısıtlaması using ifadesi kullanılamadığı için tüm CLR namespace’lerini kullanmak mümkün değil malesef. Kısıtlamalarla ilgili daha detaylı bilgi için MSDN dökümanına gözatabilirsiniz.

Kolay gelsin.

About the Author