Xamarin Forms Dynamic Resources ve Theme Mantığı

Merhaba,

Xamarin ile geliştirdiğimiz uygulamalarda XAML tasarımlarımızı yaparken style özelliklerimizi tek bir kaynaktan kontrol etmek isteyebiliriz.

Bu gibi durumlarda Xamarin bize Application altında Resources desteği ile çözüm sağlıyor.

Zaman kaybetmeden örneğimize geçiyorum.

Xamarin Forms PLC

Yeni bir PCL projesi açıyorum..

App class'ımı silip yerine App adında bir xaml dosyası ekliyorum. (Bildiğiniz gibi aslında App.xaml.cs 'de App.cs ile aynı işi görecek.)

Style işlemlerimizi Application seviyesinde yapacağımız için Application class'ından türemiş olan sayfamızda bu işlemleri gerçekleştirmeliyiz.

App.cs default olarak sadece bir class dosyası olarak gelmektedir. Fakat biz design ekranı olarak .xaml bir sayfaya ihtiyaç duyduğumuz için App.cs'i App.xaml.cs ile değiştirmiş oluyoruz.

Xamarin Forms App

Application.Resources işlemlerimizi ResourceDictionary özelliği yardımı ile kuruyorum.

Xamarin Forms Application Resource

Burda dikkat etmemiz gereken kısımlar TargetType ve BasedOn.

TargetType

Oluşturmuş olduğum style'i hangi control tipinde kullanacağımı belirtmiş oluyorum.

BasedOn

Oluşturmuş olduğum style özelliklerini, oluşturduğum diğer style özelliklere base style olarak belirtmemi sağlamaktadır.

Yani.. LabelStyle bu sayede LabelFontSize style'ının özelliklerini de kullanabilecektir.

LabelStyle style'ını kullanan bir Label Control hem Bold hem de FontSize 24 özelliklerini kullanabilecektir.

Xamarin Forms Application

App class'ımı Application class'ından türetip eklemiş olduğum MyContentPage class'ını MainPage olarak set ediyorum.

Xamarin Forms Page Resource

Sayfa bazında da özel style özellikleri ekleyebiliyoruz. MyContentPage sayfamızda Page.Resources altındaki ResourceDictionary özelliğini kullanarak sayfa içerisindeki style özelliklerimi, sayfam için global hale getirebilirim.

Xamarin Forms Page Resource

MyContentPage içerisinde hem Application seviyesinde yaptığımız style özelliklerini kullanacağız hem de sayfa bazında yaptıklarımızı.

Dikkat etmemiz gereken nokta DynamicResource ve StaticResource kullanımları.

DynamicResource ile sayfa içerisinde tanımladığımız ve theme olarak kullanıp duruma göre değişiklik gösterebilecek özelliklerimizi kullanıyoruz.

StaticResource ile Application içerisinde tüm sayfalardan ulaşabileceğimiz özellikleri kullanabiliyoruz.

{DynamicResource "Key"} {StaticResource "Key"}

Xamarin Forms Resource

Düzgün çalıştığını görüyoruz.

Xamarin Forms Dynamic Resource

Style özelliklerimizi dinamik olarak değiştirebilmek için 2 tane button control atıp Clicked event'lerini set ediyorum.

Xamarin Forms Dynamic Resource

.cs tarafında event içerisine Resources özelliği ile .xaml tarafındaki tanımladığımız DynamicResources özelliklerini değiştirebiliyoruz.

Resources[“Key”] = Value

Xamarin ile hem uygulama seviyesinde hem de sayfa bazında Theme mantığı kurmak gördüğünüz gibi çok kolay.

Geliştirmekte olduğunuz uygulamalarınızda "Application Theme" mantığını kurmaya özen gösterin.

Kaynak kodları linkten indirebilirsiniz.

Xamarin Forms Dynamic Resource Android Xamarin Forms Dynamic Resource Android Xamarin Forms Dynamic Resource WinPhone Xamarin Forms Dynamic Resource WinPhone
Yiğit

Xamarin Developer, Consultant & Architect. Community Leader and Director of Xamarin Türkiye

1 Comment

You can post comments in this post.


  • Hocam eline sağlık. “StyleClass” özelliği için de dinamik yükleme olayı oluyor mu? x:Key ile tanımlayıp StaticResource/DynamicResource ile kullanmak çok hamallık oluyor class olayı varken.

    Hüseyin Göktaş 1 sene ago Reply


Post A Reply