Windows Phone üstünde tüm objelerin içeriğini temizlemek
Merhabalar, bugün çözümünü denediğim ve çözebildiğim bir kodu gerekmesi ihtimaline karşın sizlerle paylaşmak istiyorum.
Bu kod parçacığı, eğer formumuzda temizlememiz gereken çok sayıda aynı tür obje var ise (örneğin textbox yada textblock) bunların hepsinin bir kerede içeriğinin boşaltılmasını sağlıyor.
Kodumuzu inceleyelim.
Öncelikle bilmeniz gerekenler, “Gridimiz” isimli objenin üstündeki textblockları temizleyeceğiz. Yani, eğer dilerseniz sadece belirli bir objenin barındırdığı objeleri temizleyebilirsiniz, dikkat etmeniz gereken ise temizlemek istediğiniz objeleri barındıran son objenin (örneğin iç içe 10 grid var ise, textblockların birincil olarak üzerine yerleştirilmiş olduğu gridi belirtmeniz gerekir) yazıldığından emin olmanızdır. Normalde Windows Phone 7 formlarında otomatik olarak objeleri LayoutRoot isimli obje üzerine yerleştiriyoruz, ancak siz farklı bir isim veya farklı objeleri farklı objeler üzerine koymuş iseniz buna göre düzenlemeniz gerekmektedir.
Bu kodumuz ise tam olarak Gridimiz isimli grid objesinin üzerinde bulunan tüm TextBlock objelerinin “isminin ne olduğu veya isminin olup olmadığı önemsenmeksizin” .Text özelliğini boşaltmaktadır.
[crayon]
//
for (int Sayaç= 0; Sayaç < Gridimiz.Children.Count; Sayaç++)
{
if (Gridimiz.Children[Sayaç].GetType().Name == “TextBlock”) // Gridimiz’in içerisindeki alt objeleri ID numarasına göre sürekli artan Sayaç sayesinde inceliyoruz ve Type’ı TextBlock olanları yakalıyoruz.
{
TextBlock textBlock = Gridimiz.Children[Sayaç] as TextBlock; // Yakaladığımız TextBlock’u işlemek için textBlock adıyla ilişkilendiriyoruz (büyük küçük harf farketmektedir)
textBlock.Text = string.Empty; // Bu alanda da içeriği boşaltıyoruz.
}
}
//
[/crayon]
Teşekkürler..
olaya nesne yonelimli yaklasıp, sınıf hiyerarşi sini goz onunde bulundursak:
[crayon]
System.Object
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Media.Visual
System.Windows.UIElement
System.Windows.FrameworkElement
System.Windows.Controls.Panel
System.Windows.Controls.Canvas
System.Windows.Controls.DockPanel
System.Windows.Controls.Grid
System.Windows.Controls.Primitives.TabPanel
System.Windows.Controls.Primitives.ToolBarOverflowPanel
System.Windows.Controls.Primitives.UniformGrid
System.Windows.Controls.StackPanel
System.Windows.Controls.VirtualizingPanel
System.Windows.Controls.WrapPanel
//
//parametre olarak aldigi kontrole direkt veya dolayli bagli tum kontrolleri tarar
public void temizle(UIElement kok)
{
//kendisene bagli kontroller var mi / ebeveyn bir kontrol mu?
if (kok is Panel)
{
// ‘Chilren’ koleksiyonu panel sinifindan kalitila-gelen bir uyedir
foreach (UIElement cocuk in (kok as Panel).Children)
{
//ozyinemeli cagrim yapilir
temizle(cocuk);
}
}
else
{
// gecerli kontrol textbox mi?
// ‘is’ operetoru ile kalitsal kontrol yapilir
if (kok is TextBox)
{
(kok as TextBox).Clear();
}
}
}
[/crayon]