Koddaki kaynaklar (WPF .NET)

Bu genel bakış, Windows Presentation Foundation (WPF) kaynaklarına XAML söz dizimi yerine kod kullanılarak nasıl erişilebileceğine veya oluşturulabileceğine odaklanır. XAML söz dizimi açısından genel kaynak kullanımı ve kaynakları hakkında daha fazla bilgi için bkz . XAML kaynaklarına genel bakış.

Koddan kaynaklara erişme

Kodun içinde kaynak istemeniz durumunda belirli kaynakları almak için XAML tanımlı kaynakları tanımlayan anahtarlar da kullanılır. Koddan kaynak almanın en basit yolu, uygulamanızdaki çerçeve düzeyindeki nesnelerden veya TryFindResource yöntemini çağırmaktırFindResource. Bu yöntemler arasındaki davranışsal fark, istenen anahtar bulunamazsa ne olacağıdır. FindResource bir özel durum oluşturur. TryFindResource özel durum oluşturmaz ancak döndürür null. Her yöntem, giriş parametresi olarak kaynak anahtarını alır ve gevşek bir şekilde yazılan bir nesne döndürür.

Genellikle, kaynak anahtarı bir dizedir, ancak ara sıra dize olmayan kullanımlar vardır. Kod kaynağı çözümlemesi için arama mantığı, dinamik kaynak başvurusu XAML olayıyla aynıdır. Kaynak araması çağrı öğesinden başlar, ardından mantıksal ağaçtaki üst öğeler aracılığıyla devam eder. Gerekirse arama uygulama kaynaklarına, temalara ve sistem kaynaklarına doğru devam eder. Bir kaynak için kod isteği, çalışma zamanı sırasında gerçekleşen kaynaklarda yapılan değişiklikleri düzgün bir şekilde hesaba ekler.

Aşağıdaki kod örneği, anahtara göre bir Click kaynak bulan ve bir özellik ayarlamak için döndürülen değeri kullanan bir olay işleyicisini gösterir.

private void myButton_Click(object sender, RoutedEventArgs e)
{
    Button button = (Button)sender;
    button.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub myButton_Click(sender As Object, e As RoutedEventArgs)
    Dim buttonControl = DirectCast(sender, Button)
    buttonControl.Background = DirectCast(Me.FindResource("RainbowBrush"), Brush)
End Sub

Kaynak başvurusu atamak için alternatif bir yöntemdir SetResourceReference. Bu yöntem iki parametre alır: kaynağın anahtarı ve kaynak değerinin atanması gereken öğe örneğinde bulunan belirli bir bağımlılık özelliğinin tanımlayıcısı. İşlevsel olarak, bu yöntem aynıdır ve dönüş değerlerinin herhangi bir dökümünü gerektirmeme avantajına sahiptir.

Yine de program aracılığıyla kaynaklara erişmenin bir diğer yolu da özelliğin içeriğine Resources sözlük olarak erişmektir. Kaynak sözlükleri mevcut koleksiyonlara yeni kaynaklar eklemek, belirli bir anahtar adının koleksiyon tarafından zaten kullanılıp kullanılmadığı ve diğer işlemler için kullanılır. Bir WPF uygulamasını tamamen kodda yazıyorsanız, kodda koleksiyonun tamamını oluşturabilir ve ona kaynak atayabilirsiniz. Koleksiyon daha sonra bir öğenin özelliğine Resources atanabilir. Bu, sonraki bölümde açıklanmıştır.

Belirli bir anahtarı dizin olarak kullanarak belirli Resources bir koleksiyon içinde dizin oluşturabilirsiniz. Bu şekilde erişilen kaynaklar, kaynak çözümlemesinin normal çalışma zamanı kurallarına uymaz. Yalnızca bu koleksiyona erişiyorsun. kaynak arama, istenen anahtarda geçerli bir nesne bulunamazsa kaynak kapsamını köke veya uygulamaya geçirmiyor. Ancak, anahtar aramasının kapsamı daha kısıtlı olduğundan, bu yaklaşımın bazı durumlarda performans avantajları olabilir. Doğrudan bir kaynak sözlüğüyle çalışma hakkında daha fazla bilgi için sınıfına ResourceDictionary bakın.

Kodla kaynak oluşturma

Kodda bir WPF uygulamasının tamamını oluşturmak istiyorsanız, kodda bu uygulamada herhangi bir kaynak da oluşturmak isteyebilirsiniz. Bunu başarmak için yeni ResourceDictionary bir örnek oluşturun ve ardından öğesine yapılan ardışık çağrıları ResourceDictionary.Addkullanarak tüm kaynakları sözlüğe ekleyin. Ardından, bir sayfa kapsamında veya içinde bulunan bir öğede özelliğini ayarlamak için oluşturulan ResourceDictionary öğesini atayınApplication.Resources.Resources Öğesini bir öğeye ResourceDictionary eklemeden tek başına nesne olarak da koruyabilirsiniz. Ancak, bunu yaparsanız, içindeki kaynaklara genel bir sözlük gibi öğe anahtarıyla erişmeniz gerekir. Öğe ResourceDictionary özelliğine bağlı olmayan bir öğe, öğe Resources ağacının parçası olarak mevcut olmaz ve ve ilgili yöntemler tarafından FindResource kullanılabilecek bir arama dizisinde kapsamı yoktur.

Nesneleri anahtar olarak kullanma

Çoğu kaynak kullanımı, kaynağın anahtarını dize olarak ayarlar. Ancak, çeşitli WPF özellikleri nesne türünü dize yerine bir anahtar olarak kasıtlı olarak kullanır. Kaynağın bir nesne türü tarafından anahtarlanması özelliği WPF stili ve temalı destek tarafından kullanılır. Stilsiz bir denetimin varsayılanı haline gelen stiller ve temalar, uygulanacağı denetimin her biri tarafından Type anahtarlanır.

Türe göre anahtarlandırılmak, her denetim türünün varsayılan örneklerinde çalışan güvenilir bir arama mekanizması sağlar. Tür, yansıma tarafından algılanabilir ve türetilmiş türün varsayılan stili olmasa bile türetilmiş sınıfları stil olarak yazmak için kullanılabilir. x:Type biçimlendirme uzantısını kullanarak XAML'de tanımlanan bir kaynak için anahtar belirtebilirsinizType. ComponentResourceKey İşaretleme Uzantısı gibi WPF özelliklerini destekleyen diğer dize dışı anahtar kullanımları için de benzer uzantılar vardır.

Daha fazla bilgi için bkz . Stiller, DataTemplates ve örtük anahtarlar.

Ayrıca bkz.