Aracılığıyla paylaş


WPF'de Code-Behind ve XAML

Code-behind, bir XAML sayfası işaretleme ile derlendiğinde işaretleme ile tanımlanan nesnelerle bağlantılı olan kodu açıklamak için kullanılan bir terimdir. Bu konu, arka planda kod gereksinimlerinin yanı sıra XAML'deki kod için alternatif bir satır içi kod mekanizmasını açıklar.

Bu konu aşağıdaki bölümleri içerir:

Önkoşullar

Bu konu başlığında WPF XAML okuduğunuz ve CLR ve nesne odaklı programlama hakkında bazı temel bilgilere sahip olduğunuz varsayılır.

Code-Behind ve XAML Dili

XAML dili, işaretleme dosyası tarafından kod dosyalarını işaretleme dosyalarıyla ilişkilendirmeyi mümkün hale getiren dil düzeyinde özellikler içerir. Özellikle, XAML dili x:Class Yönergesi, x:Subclass Yönergesive x:ClassModifier Yönergesidil özelliklerini tanımlar. Kodun tam olarak nasıl üretilmesi gerektiği ve işaretleme ile kodun nasıl tümleştirileceği, XAML dilinin belirttiğinin bir parçası değildir. Kodun nasıl tümleştirileceğini, uygulama ve programlama modellerinde XAML'nin nasıl kullanılacağını ve tüm bunların gerektirdiği derleme eylemlerini veya diğer desteği belirlemek için WPF gibi çerçevelere bırakılır.

WPF'de arka planda kod, Olay İşleyicisi ve Kısmi Sınıf Gereksinimleri

  • Kısmi sınıf, kök öğeyi destekleyen türden türetilmelidir.

  • İşaretleme derleme eylemlerinin varsayılan davranışı altında, kod-arkası tarafında kısmi sınıf tanımında türetme işlemini boş bırakabileceğinizi unutmayın. Derlenen sonuç, sayfa kökü yedekleme türünün belirtilmemiş olsa bile kısmi sınıfın temeli olduğunu varsayar. Ancak, bu davranışa güvenmek en iyi yöntem değildir.

  • Arka planda koda yazdığınız olay işleyicileri örnek yöntemleri olmalıdır ve statik yöntemler olamaz. Bu yöntemler, x:Classtarafından tanımlanan CLR ad alanında kısmi sınıf tarafından tanımlanmalıdır. XAML işlemcisine farklı bir sınıf kapsamında olay kablolama için bir olay işleyicisi araması talimatı vermek üzere bir olay işleyicisinin adını niteleyemezsiniz.

  • İşleyici, yedekleme türü sistemindeki uygun olay için temsilciyle eşleşmelidir.

  • Özellikle Microsoft Visual Basic dili için, işleyicileri XAML'de özniteliklerle eklemek yerine işleyicileri işleyici bildirimindeki örnekler ve olaylarla ilişkilendirmek için dile özgü Handles anahtar sözcüğünü kullanabilirsiniz. Ancak, Handles anahtar sözcüğü belirli yönlendirilmiş olay senaryoları veya ekli olaylar gibi WPF olay sisteminin belirli özelliklerinin tümünü desteklemediğinden bu tekniğin bazı sınırlamaları vardır. Ayrıntılar için bkz. Visual Basic ve WPF Olay İşleme.

x:Code

x:Code, XAML'de tanımlanan bir yönerge öğesidir. x:Code yönerge öğesi satır içi programlama kodu içerebilir. Satır içinde tanımlanan kod, XAML ile aynı sayfada etkileşimde bulunabilir. Aşağıdaki örnekte satır içi C# kodu gösterilmektedir. Kodun x:Code öğesinin içinde olduğuna dikkat edin ve bir XAML veya WPF şemasını yorumlamaya çalışan bir işlemcinin içeriği XML olarak yorumlamaya çalışmaması için, XML içeriğinin kaçmasını sağlamak amacıyla kodun <CDATA[...]]> ile çevrelenmesi gerektiğine dikkat edin.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="MyNamespace.MyCanvasCodeInline"
>
  <Button Name="button1" Click="Clicked">Click Me!</Button>
  <x:Code><![CDATA[
    void Clicked(object sender, RoutedEventArgs e)
    {
        button1.Content = "Hello World";
    }
  ]]></x:Code>
</Page>

Satır içi Kod Sınırlamaları

Satır içi kod kullanımından kaçınmayı veya sınırlamayı göz önünde bulundurmalısınız. Mimari ve kodlama felsefesi açısından işaretleme ve arka planda kod ayrımı sağlamak tasarımcı ve geliştirici rollerini çok daha ayrı tutar. Daha teknik bir düzeyde, satır içi kod için yazdığınız kodun yazılması garip olabilir çünkü her zaman XAML tarafından oluşturulan kısmi sınıfa yazarsınız ve yalnızca varsayılan XML ad alanı eşlemelerini kullanabilirsiniz. using deyimleri ekleyemediğiniz için, yaptığınız API çağrılarının çoğunu tam olarak nitelemeniz gerekir. Varsayılan WPF eşlemeleri, WPF derlemelerinde mevcut olan çoğu CLR ad alanını içerir fakat tümünü değil; diğer bazı CLR ad alanlarında yer alan tür ve üyelere yönelik çağrıları tam olarak nitelemeniz gerekir. Satır içi kodda kısmi sınıfın ötesinde hiçbir şey tanımlayamazsınız ve başvurabileceğiniz tüm kullanıcı kodu varlıkları, oluşturulan kısmi sınıf içinde üye veya değişken olarak bulunmalıdır. Makrolar veya genel değişkenlere veya derleme değişkenlerine karşı #ifdef gibi diğer dile özgü programlama özellikleri de kullanılamaz. Daha fazla bilgi için bkz. x:Code İç XAML Türü.

Ayrıca bakınız