2016-11-14 16 views
5

Kaynak dönüştürücüyü (aynı sözlüğü) birçok dönüştürücüde yerel değişken olarak kullanıyorum.Kaynak Sözlük, projenin tüm bölümlerinde verimli bir şekilde nasıl kullanılır?

var DeignerDictionary = new ResourceDictionary 
{ 
    Source = new Uri(path) 
}; 

Her yeni bir örnek oluşturduğumda ve uygulamada bellek çok yüksek gidiyor.

Sonra kaynak sözlüğünü statik bir alana taşıdım ve sözlüğü yeniden kullanıyorum, ancak stiller düzgün bir şekilde oluşturulmuyor.

Yanlış yaptığım şeyi öneren herkes, Lütfen önerilerinizi belirtin.

Sorun, ResourceDictionary öğesinin yalnızca statik olarak değiştirilmesinden sonra gerçekleşir. Ancak aşağıdaki kod düzgün çalışıyor.

public class resourceDictionaryProvider{ 
    public static readonly ResourceDictionary StaticDictionary = 
    new ResourceDictionar {Source = new Uri(path)}; 
} 

Şimdi resourceDictionaryProvider sınıf için bir örneğini oluşturma ve iyi çalışıyor, ama sadece ben statik bunu değişti yüzden örneklerini oluşturmak istemiyoruz.

Burada statik anahtar kelimeyle ilgili sorun nedir?

+6

. Bunun yerine XAML dosyalarında bildirilmeli ve (gerekirse) arkasından koddan erişilmelidir. – Clemens

+1

Kaynak sözlüklerini http://stackoverflow.com/questions/25023671/nested-resource-dictionary-in-separate-library adresindeki açıklayan Kaynak özniteliğini kullanarak diğer kaynak sözlüklerinde kullanabilirsiniz. App.xaml, uygulama ile otomatik olarak yüklenecek bir kaynak sözlüğü içerir, bu yüzden uygulama kapsamını kullanabilmeniz için ne dahil ederseniz veya referansta bulunduğunuzu belirtin. –

+1

Adreslemeye çalıştığı sorun, kaynak sözlük örnekleri ile iyi bilinen bir konudur (her kontrol için referans alındığında her yuvalanmış olanlar dahil olmak üzere sözlükler yeniden oluşturulacak ana kaynak domuz) - esasen SharedResourceDictionary öğesini kullanmaya çalışıyor. Soru geçerli ve buna gerçek bir cevap görmek güzel olurdu. – Maverik

cevap

3

Bu WPF ResourceDictionaries ile bilinen bir sorundur. Çözüm, her kullanımda kaynakların yeniden oluşturulmasını önleyen bir SharedResourceDictionary kurgu uygulamak olacaktır. SharedResourceDictionary yapısının müthiş uygulanması için WPF SharedResourceDictionary iki konunun çözmeniz gereken vardır

+1

bir bit açıklamayla daha fazla uygulama: http://www.wpftutorial.net/MergedDictionaryPerformance.html – Allender

1

(yazara tüm krediler): Bu bağlantıyı bir göz atın.

  1. kaynak sözlükleri arasında paylaşılabilir projenizin veya çözümünüzün modülleri;
  2. Stil ayarlarını yapmak için tasarım zamanı kaynak sözlüğüne sahip olmak kullanışlı olur.

konu 1. çözmek için, bu gibi, App.xaml dosyasına kaynak sözlükleri eklemek kolaydır ve daha sonra bir kere kullanacağımız olacak ve tüm proje için kullanılabilir olacak:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary 
       Source="pack://application:,,,/Themes;component/Generic.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

sorunu 2. çözmek için, kaynak sözlüğü yalnızca tasarım zamanında başlatılan bir geçici çözüm çözüm gerekir. Design time resource dictionary

göz atın ve sonra, bu gibi, UI'ler üzerinde DesignTimeResourceDictionary kullanabilirsiniz: Sen kod arkasında ResourceDictionaries örneğini olmamalıdır

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <designer:DesignTimeResourceDictionary 
       Source="pack://application:,,,/Themes;component/Generic.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 
İlgili konular