Makale Özeti

Bu makalemizde size static resource ve dynamic resource kullanımını ve farklarını örneklerle anlatmaya çalışacağız.

Makale

Makale:
Web uygulaması geliştirmiş olan arkadaşlar cssle de yüksek ihtimalle çalışmışlardır. Bir sayfadaki tüm öğeleri veya belli bir kısım
öğeyi renk, boyut, arka plan resmi, sayfadaki konumu, sağından solundan olan boşlukları ve daha birçok özelliği yönünden css
ile tanımlayabiliriz. Daha sonra bu tanımlamaları istediğimiz yerden kullanabiliriz. Css dosyası ile çalışmak bize sitenin
görünümünü değiştirmek istediğimizde elimizdeki onlarca belki de yüzlerce sayfanın kodlarını değiştirmeden sadece css dosyasını
değiştirdiğimizde istediğimiz görsel değişikliği yapabilmemizi sağlıyor. Wpf’te resource mantığı da benzer şekilde işlemektedir.

Resource nedir?
Wpf’te resource sistemi basit şekilde brushes, styles ya da templates gibi sıkça uygulama içinde kullanabileceğimiz kaynak nesneleri
belirtmektir. Bu sayede bu kaynak nesnelerini kolay bir şekilde istediğimiz zaman kullanabiliriz. Resourcelar kod tarafında
oluşturulup kullanılabileceği gibi genelde xaml tarafında tanımlanırlar. Resourcelar bir kere tanımlandığında, tanımlandığı yerde
uygulamanın sonuna kadar kullanılırlar. Bu teknik sayesinde kod tekrarlanmasının önüne geçmiş olunur, markupun daha okunaklı ve
anlaşılır olmasını sağlanır ve user interface (Butonun arka rengi gibi) detaylarını tek bir yerden yönetebilir.
Burada window' un resourcelarının altına TextBlock kontrolü için bir tane resource tanımladık. Style tagleri arasında tanımlanan bu
kaynağın bazı propertilerinin değerlerini set ettik. Window altında bulunan tüm TextBlock kontrolleri aşağıda örneği verilen şekillerde
kullandıkları takdirde bu resource’tan faydalanırlar.

Örnek kullanım:
< TextBlock Grid.Row="0" Grid.Column="1" Style="{StaticResource TextBlockKey }"/>
< TextBlock Grid.Row="0" Grid.Column="1" Style="{DynamicResource TextBlockKey }"/>

Eğer style resource’unu tanımlarken key kullanmasaydık, TextBlock kontrolleri default olarak bu resource'dan faydalacaklardı.

Static Resource Nedir?
Static resource durağan kaynak demektir. Peki durağan kaynakla neden bahsediyoruz? Static Resource reference’ı bir kere XAML kodu
yüklenirken çalıştırılır. Bu resourcetaki herhangi bir değişiklik, bu resource ‘u kullanan property tarafından algılanmaz.

DynamicResource Resource Nedir?
Dynamic Resource değişebilen kaynak demektir. Dynamic Resource şeklinde tanımlanmış propertiler uygulama içinde çalıştırıldıkça, bu
propertilerin referans ettikleri dynamic resourcelar da çalıştırılır. Yani bu resourcelar’da yapılan herhangi bir değişiklik anında bu
resourceları kullanan propertiler tarafından algılanır. Şimdi basit bir örnekle açıklamaya çalışalım.

Xaml
Window resourcelarının altına bir tane solidcolorbrush kaynağı tanımladık. Sonra window tarafında iki tane textblock tanımlayıp, bir tanesinin
Foreground propertisine window altına tanımlamış olduğumuz solidcolorbrush kaynağını staticresource olarak verdik, diğerinin
Foreground propertisine de DynamicResource olarak verdik. DynamicResource ile StaticResource'un farkını cs tarafından anlamaya çalışalım.

Cs
Tamam butonunun click eventinde window altında tanımlanmış olan SolidColorBrush kaynağını "WindowBrush" anahtarı ile buluyoruz. Sonra siyah
renkte yeni oluşturduğumuz SolidColorBrush nesnesini bu kaynağa atıyoruz. DynacimResource olarak tanımladığımız nesnenin Foreground
propertisi bu değişiklikten hemen etkilenirken, StaticResource olarak tanımladığımız nesnenin Foreground propertisi bu değişiklikten
etkilenmiyor.
Sonuç olarak, staticresource'a referans eden propertiler, static resource'ta yapılan herhangi bir değişikliğe anında reaksiyon vermezken dynamicresource
olarak referans eden propertiler kaynakta yapılan herhangi bir değişiklikten hemen etkilenirler. DynamicResource'un uygulamaya ek yük getirdiğini
unutmamak gerekir. Aşağıdaki durumlarda dynamicresource kullanımı önerilmektedir.
- Kaynağın sistem ayarlarına ( windows renkleri ve fontları gibi ) bağlı propertileri varsa
- Kaynak nesnelerini run time' da değiştirmeyi planlıyorsak

Resource kullanımını, getirdiği faydaları, neden kullanıldığını, staticresource'la dynamicresource'un ne olduğunu, aralarındaki farkları anlatmaya
çalıştık. Bir sonraki makalemizde görüşmek üzere...

Sezgin Zeka
sezginzeka@gmail.com
Dynamic ve Static Resource Örneği