Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 FindResource veya TryFindResource yöntemini çağırmaktır. 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şvurusunu tanımlamak için alternatif bir yöntem 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.
Kaynaklara program aracılığıyla erişmenin bir diğer yolu da Resources özelliğinin içeriğine 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
Kod ile bir WPF uygulamasının tamamını oluşturmak istiyorsanız, bu uygulamadaki kaynakları da kod ile oluşturmak isteyebilirsiniz. Bunu başarmak için yeni bir ResourceDictionary örneği oluşturun ve ardından ResourceDictionary.Addardışık çağrıları kullanarak 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ınResources.Application.Resources
ResourceDictionary bir öğeye 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. Typekullanarak XAML'de tanımlanan bir kaynak için anahtarı belirtebilirsiniz. ComponentResourceKey Biçimlendirme 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 bakınız
.NET Desktop feedback