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.
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.
Application.Resources işlemlerimizi ResourceDictionary özelliği yardımı ile kuruyorum.
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.
App class'ımı Application class'ından türetip eklemiş olduğum MyContentPage class'ını MainPage olarak set ediyorum.
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.
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"}
Düzgün çalıştığını görüyoruz.
Style özelliklerimizi dinamik olarak değiştirebilmek için 2 tane button control atıp Clicked event'lerini set ediyorum.
.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.
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ş 2 sene ago
Post A Reply