Silverlight ve WPF'de Design Mode ve Init durumunda kodlar sorunsalı.

0 dakikada yazıldı

11529 defa okundu

Düzenle

WPF veya Silverlight projelerinde Inıt durumu ile PageLoad veya
WindowLoad event'ları arasındaki fark bazen ilk bakışta yokmuş gibi
varsayılarak kodların doğrudan Init kısmına yazıldığını çok gördüm.
Bazen bu durum sorun çıkarmasa da aslında tam olarak Init durumu
bitmediği için bazı kaynaklara veya kontrollere ulaşmama hatta bu ulaşıp
/ ulaşmama durumunun da belli olmaması :) gibi garip hatalar ile
karşılaşabilirsiniz. O nedenle benim genel tavsiyem sürekli Loaded
event'larının kullanılması ve Init'in sadece ek event-listener
tanımlamalarının yapılacağı bir konum olarak saklanması.

Bu çerçevede bir diğer sorun ise Init durumuna yazdığınız kodların
aslında hem Blend hem de Visual Studio tarafından Design modundayken
çalıştırılıyor olması. Eğer bu bilgiye sahip değilseniz maalesef ki
Init durumunda yaptığınız ağır bir işlemin bir anda Visual Studio ve
Blend'in arayüzüne de binmesi ve Page.XAML gibi bir dosyayı açtığınız
anda yüksek işlemci kullanımları ile karşılaşmanız olası. En basit çözüm
bu kodları Init'den çıkarmak ve Loaded'a yerleştirmek olabilir fakat ya
Init'i kesinlikle kullanmanız gerekiyorsa?

[C#]

            if
(System.ComponentModel.DesignerProperties.GetIsInDesignMode(this) == false)

            {

 

            }

İşte yukarıdaki gibi bir kontrol ile söz konusu Init kodunun içinde
uygulamanın DesignMode'da olup olmadığını kontrol edebilirsiniz. Böylece
eğer sayfa Visual Studio veya Blend ile Design modunda açılmış ise bu IF
içerisinde kodlar çalıştırılmayacak. Oysa programı F5 ile compile edip
çalıştırdığınızda ise herhangi bir sorun ile karşılaşamaycaksınız.

Hepinize kolay gelsin.