Aracılığıyla paylaş


Kaynaklar ve Kod

Bu genel bakış, Windows Presentation Foundation (WPF) kaynaklarına Genişletilebilir Uygulama Biçimlendirme Dili (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ı.

Koddan Kaynaklara Erişme

Kaynakları XAML aracılığıyla tanımlanmışsa tanımlayan anahtarlar, kodun içinde kaynak istemeniz durumunda belirli kaynakları almak için de 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ış 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 dışı kullanımlar vardır; Ayrıntılar için Nesneleri Anahtar Olarak Kullanma bölümüne bakın. Genellikle döndürülen nesneyi, kaynağı isterken ayarladığınız özelliğin gerektirdiği türe atarsınız. 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 ardışık üst öğelere devam eder. Gerekirse arama uygulama kaynaklarına, temalara ve sistem kaynaklarına doğru devam eder. Bir kaynak için kod isteği, XAML'den yüklenen kaynak sözlüğünden sonra yapılmış olabilecek kaynak sözlüklerindeki çalışma zamanı değişikliklerini ve ayrıca gerçek zamanlı sistem kaynak değişikliklerini düzgün şekilde hesaba katar.

Aşağıda anahtara göre bir kaynak bulan ve döndürülen değeri kullanarak olay işleyicisi olarak uygulanan bir özellik ayarlayan kısa bir Click kod örneği verilmiştir.

void SetBGByResource(object sender, RoutedEventArgs e)
{
  Button b = sender as Button;
  b.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub SetBGByResource(ByVal sender As Object, ByVal e As RoutedEventArgs)
  Dim b As Button = TryCast(sender, Button)
  b.Background = CType(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. Bu özelliğin içerdiği sözlüğe erişmek ayrıca var olan koleksiyonlara yeni kaynaklar ekleme, belirli bir anahtar adının koleksiyonda zaten alınıp alınmadığını denetleme ve diğer sözlük/koleksiyon işlemleridir. Bir WPF uygulamasını tamamen kodda yazıyorsanız, kodda koleksiyonun tamamını oluşturabilir, anahtarları atayabilir ve ardından tamamlanmış koleksiyonu yerleşik bir öğenin özelliğine Resources atayabilirsiniz. Bu, sonraki bölümde açıklanacaktır.

Dizin olarak belirli bir anahtarı kullanarak belirli Resources bir koleksiyonda dizin oluşturabilirsiniz, ancak kaynağa bu şekilde erişmenin kaynak çözümlemesinin normal çalışma zamanı kurallarına uymadığını bilmeniz gerekir. Yalnızca bu koleksiyona erişiyorsunuz. İstenen anahtarda geçerli bir nesne bulunamazsa kaynak arama kapsamı köke veya uygulamaya geçirmeyecek. Ancak, anahtar aramasının kapsamı daha kısıtlı olduğundan, bu yaklaşımın bazı durumlarda performans avantajları olabilir. ResourceDictionary Doğrudan kaynak sözlüğüyle çalışma hakkında daha fazla bilgi için sınıfına bakın.

Kod ile 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 Application.Resourcesiçinde bulunan bir öğede özelliğini ayarlamak Resources için oluşturulan öğesini kullanınResourceDictionary. Öğ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. Bir ResourceDictionary öğe Resources özelliğine bağlı olmayan bir öğe 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 anahtarları belirtmek için kasıtlı olarak bir dize türü kullanmaz, bunun yerine bu parametre bir nesnedir. Kaynağın bir nesne tarafından anahtarlanması özelliği WPF stili ve temalı destek tarafından kullanılır. Stilsiz bir denetimin varsayılan stili haline gelen temalardaki stiller, her biri geçerli olması gereken denetim tarafından Type anahtarlanır. Türe göre anahtarlama, her denetim türünün varsayılan örneklerinde çalışan güvenilir bir arama mekanizması sağlar ve tür, yansıma tarafından algılanabilir ve türetilmiş türün varsayılan stili olmasa bile türetilmiş sınıfları şekillendirmek 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.

Ayrıca bkz.