Visualtreehelper | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar visualtreehelper

Windows Phone ekrandaki formu temizleme

12 August 2013 Yorum yapılmamış

Windows Phone için geliştirdiğiniz uygulamaya bir form eklediniz ve çok fazla giriş kutusu var (TextBox, PasswordBox, CheckBox, vs.)

Ekleyeceğiniz Temizle butonu aracılığıyla ekrandaki tüm giriş kutularını temizlemek istiyorsunuz. Page şablonunun varsayılan halinde yeralan LayoutRoot isimli Grid üzerinden temizleme yapabilirsiniz;

foreach (var element in LayoutRoot.Children)
{
	if (element is TextBox)
	{
		(element as TextBox).Text = "";
	}
}

Fakat tasarımına uymamasından dolayı LayoutRoot isimli Grid ekranda olmayabilir ve daha genel bir yöntemle tüm giriş kutularını temizlemek isteyebilirsiniz.

Aşağıdaki gibi bir kendini çağıran fonksiyon (recursive function) aracılığıyla bu işi yaptırabilirsiniz;

private void ClearTextbox(DependencyObject element)
{
	var elementChildCount = VisualTreeHelper.GetChildrenCount(element);

	if (elementChildCount > 0)
	{
		for (var iLoop = 0; iLoop < elementChildCount; iLoop++)
		{
			var innerElement = VisualTreeHelper.GetChild(element, iLoop);

			if (innerElement is TextBox)
			{
				(innerElement as TextBox).Text = "";
			}
			else
			{
				ClearTextbox(innerElement);
			}
		}
	}
}

VisualTreeHelper sınıfının static GetChildrenCount() methodu ile ilgili nesnenin içinde başka bir nesne olup olmadığını kontrol ediyoruz, eğer nesne başka nesne içeriyorsa, döngü aracılığı ile dönerek GetChild() methodu sayesinde her elemanı buluyoruz.

Bulduğumuz nesne eğer bir TextBox ise, basitçe Text özelliğini boşaltıyoruz, değilse fonksiyonu tekrar çağırıp elde ettiğimiz nesneyi veriyoruz. Böylece her nesnenin içerdiği elemanları teker teker bulup içeriklerini temizleyebiliyoruz.

Kullanmak için;

private void TemizleButton_OnClick(object sender, RoutedEventArgs e)
{
	ClearTextbox(this);
}