Birleştirilmiş kaynak sözlükleri (WPF .NET)

Windows Presentation Foundation (WPF) kaynakları birleştirilmiş bir kaynak sözlüğü özelliğini destekler. Bu özellik, bir WPF uygulamasının kaynaklar bölümünü derlenmiş XAML uygulamasının dışında tanımlamak için bir yol sağlar. Daha sonra kaynaklar uygulamalar arasında paylaşılabilir ve yerelleştirme için daha rahat yalıtılır.

Önemli

.NET 7 ve .NET 6 için Masaüstü Kılavuzu belgeleri yapım aşamasındadır.

Birleştirilmiş sözlük oluşturma

İşaretlemede, birleştirilmiş kaynak sözlüğüne sayfa eklemek için aşağıdaki söz dizimini kullanırsınız:

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

öğesinin ResourceDictionary bir kaynak koleksiyonundaki tüm öğeler için genellikle gerekli olan bir x:Key Yönergesi yoktur. Ancak koleksiyondaki MergedDictionaries bir diğer ResourceDictionary başvuru da bu birleştirilmiş kaynak sözlüğü senaryosu için ayrılmış özel bir durumdur. Ayrıca, ResourceDictionary birleştirilmiş bir kaynak sözlüğü tanıtır, x:Key Yönergesi olamaz.

Genellikle, koleksiyondaki MergedDictionaries her ResourceDictionary bir Source öznitelik belirtir. değeri Source , birleştirilecek kaynak dosyasının konumuna çözümlenen tekdüzen bir kaynak tanımlayıcısı (URI) olmalıdır. Bu URI'nin hedefi, kök öğesi olarak başka ResourceDictionary bir XAML dosyası olmalıdır.

Dekont

birleştirilmiş sözlük olarak belirtilen bir ResourceDictionary içindeki kaynakları, belirtmeye Sourcealternatif olarak veya belirtilen kaynaktan dahil edilen kaynaklara ek olarak tanımlamak yasaldır. Ancak bu yaygın bir senaryo değildir. Birleştirilmiş sözlükler için ana senaryo, dış dosya konumlarından kaynakları birleştirmektir. Bir sayfanın işaretlemesindeki kaynakları belirtmek istiyorsanız, bunları birleştirilmiş sözlüklerde değil ana ResourceDictionary sözlükte tanımlayın.

Birleştirilmiş sözlük davranışı

Birleştirilmiş bir sözlükteki kaynaklar, kaynak arama kapsamında birleştirildikleri ana kaynak sözlüğü kapsamından hemen sonra gelen bir konum kaplar. Kaynak anahtarının tek tek herhangi bir sözlükte benzersiz olması gerekse de, bir anahtar birleştirilmiş sözlük kümesinde birden çok kez bulunabilir. Bu durumda, döndürülen kaynak koleksiyonda MergedDictionaries sıralı olarak bulunan son sözlükten gelir. MergedDictionaries Koleksiyon XAML'de tanımlanmışsa, koleksiyondaki birleştirilmiş sözlüklerin sırası, işaretlemede sağlanan öğelerin sırasıdır. Anahtar birincil sözlükte ve ayrıca birleştirilmiş bir sözlükte tanımlanmışsa, döndürülen kaynak birincil sözlükten gelir. Bu kapsam belirleme kuralları hem statik kaynak başvuruları hem de dinamik kaynak başvuruları için aynı şekilde uygulanır.

Birleştirilmiş sözlükler ve kod

Birleştirilmiş sözlükler kod aracılığıyla sözlüğe Resources eklenebilir. Herhangi bir Resources özellik için mevcut olan varsayılan, başlangıçta boş ResourceDictionary olan varsayılan, başlangıçta boş MergedDictionaries bir koleksiyon özelliğine de sahiptir. Kod aracılığıyla birleştirilmiş sözlük eklemek için, istenen birincil ResourceDictionaryöğeye bir başvuru alırsınız, özellik değerini alır MergedDictionaries ve içinde MergedDictionariesbulunan genel Collection öğeyi çağırırsınızAdd. Eklediğiniz nesne yeni ResourceDictionaryolmalıdır.

Kodda özelliğini ayarlamazsınız Source . Bunun yerine, bir nesne oluşturarak veya yükleyerek bir ResourceDictionary nesne edinmeniz gerekir. Kökü olan mevcut bir XAML dosya akışına çağrı XamlReader.Load yapmak için var olan ResourceDictionary bir dosyayı yüklemenin ve ardından dönüş değerini öğesine ResourceDictionarydönüştürmenin bir ResourceDictionary yolu.

Birleştirilmiş sözlük URI'leri

Kullandığınız tekdüzen kaynak tanımlayıcısı (URI) biçimiyle gösterilen birleştirilmiş kaynak sözlüğü eklemeye yönelik çeşitli teknikler vardır. Genel olarak, bu teknikler iki kategoriye ayrılabilir: projenin bir parçası olarak derlenen kaynaklar ve projenin bir parçası olarak derlenmemiş kaynaklar.

Projenin bir parçası olarak derlenen kaynaklar için kaynak konumuna başvuran göreli bir yol kullanabilirsiniz. Göreli yol, derleme sırasında değerlendirilir. Kaynağınız projenin bir parçası olarak Kaynak derleme eylemi olarak tanımlanmalıdır. Projeye Kaynak olarak bir kaynak .xaml dosyası eklerseniz, kaynak dosyasını çıkış dizinine kopyalamanız gerekmez, kaynak zaten derlenmiş uygulamaya dahil edilir. İçerik derleme eylemini de kullanabilirsiniz, ancak ardından dosyaları çıkış dizinine kopyalamanız ve ayrıca kaynak dosyalarını yürütülebilir dosyayla aynı yol ilişkisinde dağıtmanız gerekir.

Dekont

Katıştırılmış Kaynak derleme eylemini kullanmayın. Derleme eylemi WPF uygulamaları için desteklenir, ancak çözümlemesi Source öğesini içermez ResourceManagerve bu nedenle tek tek kaynağı akıştan ayıramaz. Kaynaklara erişmek için de kullandığınız ResourceManager sürece Ekli Kaynak'ı başka amaçlarla kullanmaya devam edebilirsiniz.

İlgili bir teknik, bir XAML dosyası için Paket URI'sini kullanmak ve buna Kaynak olarak başvurmaktır. Paket URI'si , başvuruda olunan derlemelerin bileşenlerine ve diğer tekniklere başvurular sağlar. Paket URI'leri hakkında daha fazla bilgi için bkz. WPF Uygulama Kaynağı, İçerik ve Veri Dosyaları.

Projenin bir parçası olarak derlenmemiş kaynaklar için URI çalışma zamanında değerlendirilir. Kaynak dosyasına başvurmak için dosya: veya http: gibi yaygın bir URI aktarımı kullanabilirsiniz. Derlenmemiş kaynak yaklaşımını kullanmanın dezavantajı şudur : erişim ek dağıtım adımları gerektirir ve http: erişim İnternet güvenlik bölgesini ifade eder.

Birleştirilmiş sözlükleri yeniden kullan

Birleştirilecek kaynak sözlüğüne herhangi bir geçerli tekdüzen kaynak tanımlayıcısı (URI) aracılığıyla başvurulabildiği için, birleştirilmiş kaynak sözlüklerini uygulamalar arasında yeniden kullanabilir veya paylaşabilirsiniz. Bunu tam olarak nasıl yaptığınız, uygulama dağıtım stratejinize ve hangi uygulama modelini izlediğinize bağlıdır. Daha önce bahsedilen Pack URI stratejisi , derleme başvurusu paylaşarak geliştirme sırasında birden çok proje arasında birleştirilmiş bir kaynağın kaynağını oluşturmanın bir yolunu sağlar. Bu senaryoda kaynaklar hala istemci tarafından dağıtılır ve uygulamalardan en az birinin başvuruda bulunılan derlemeyi dağıtması gerekir. Http: protokolunu kullanan dağıtılmış bir URI aracılığıyla birleştirilmiş kaynaklara başvurmak da mümkündür.

Birleştirilmiş sözlükleri yerel uygulama dosyaları olarak veya yerel paylaşılan depolama alanına yazmak, başka bir olası birleştirilmiş sözlük ve uygulama dağıtım senaryosudur.

Yerelleştirme

Yerelleştirilmesi gereken kaynaklar birincil sözlükler ile birleştirilen ve gevşek XAML olarak tutulan sözlüklere yalıtılırsa, bu dosyalar ayrı olarak yerelleştirilebilir. Bu teknik, uydu kaynak derlemelerini yerelleştirmeye basit bir alternatiftir. Ayrıntılar için bkz . WPF Genelleştirme ve Yerelleştirmeye Genel Bakış.

Ayrıca bkz.