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

Arşiv

Etiketlenen yazılar layoutroot

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);
}

Windows Phone 8 LongListSelector DataBind örneği

01 March 2013 3 yorum

Windows Phone 8 uygulamanıza LongListSelector kontrolü eklemeniz ve bir veri kaynağına bağlamanız gerekiyorsa aşağıdaki adımları izleyebilirsiniz.

Öncelikle DataBindSample isimli yeni bir Windows Phone App projesi oluşturalım;

Data Bind Sample Windows Phone Application Project

Proje oluşturduktan sonra gelen Windows Phone Platform versiyon seçim penceresinde Windows Phone OS 8.0 seçeneğinin seçili olduğundan emin olmalıyız;

Windows Phone 8.0 SDK

Bu örnek için Book ve BookList isminde birer class oluşturacağız.

Book sınıfına Title ve Writer isminde iki property ekleyelim;

public class Book
{
	public string Title { get; set; }

	public string Writer { get; set; }
}

BookList sınıfını List<Book> sınıfından türeteceğiz;

public class BookList : List<Book>
{
	public BookList()
	{
		Add(new Book() { Title = "Jurassic Park", Writer = "Michael Crichton" });
		Add(new Book() { Title = "Bourne Identity", Writer = "Robert Ludlum" });
		Add(new Book() { Title = "Devil Wears Prada", Writer = "Lauren Weisberger" });
		Add(new Book() { Title = "Fight Club", Writer = "Chuck Palahniuk" });
		Add(new Book() { Title = "Forrest Gump", Writer = "Winston Groom" });
		Add(new Book() { Title = "Green Mile", Writer = "Stephen King" });
		Add(new Book() { Title = "I Am Legend", Writer = "Richard Matheson" });
		Add(new Book() { Title = "Jaws", Writer = "Peter Benchley" });
		Add(new Book() { Title = "Notebook", Writer = "Nicholas Sparks" });
		Add(new Book() { Title = "Silence of the Lambs", Writer = "Thomas Harris" });
		Add(new Book() { Title = "Spartacus", Writer = "Howard Fast" });
	}
}

BookList sınıfının constructor‘ında listeye birkaç kitap ekliyoruz, böylece uygulamayı çalıştırdığımızda ekrana gelecek liste dolu olacak.

Not : Test süreci sonunda constructor’daki kodlar temizlenmeli ve verikaynağı olarak veritabanına veya bir web service’e bağlanmalıdır.

MainPage.xaml dosyasını aşağıdaki şekilde güncelleyerek ekrana list isminde bir LongListSelector ve DataTemplate özelliğine StackPanel içerisinde TextBlock‘lar ekleyelim;

<Grid x:Name="LayoutRoot" Background="Transparent">
	<Grid.RowDefinitions>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="*"/>
	</Grid.RowDefinitions>

	<TextBlock Text="databind örnek" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" />

	<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
		<phone:LongListSelector Name="list">
			<phone:LongListSelector.ItemTemplate>
				<DataTemplate>
					<StackPanel Orientation="Horizontal">
						<TextBlock Text="{Binding Path=Title}" />
						<TextBlock Text=" ( " />
						<TextBlock Text="{Binding Path=Writer}" FontStyle="Italic" />
						<TextBlock Text=" )" />
					</StackPanel>
				</DataTemplate>
			</phone:LongListSelector.ItemTemplate>
		</phone:LongListSelector>
	</Grid>
</Grid>

Son olarak MainPage.xaml.cs constructor‘ında LongListSelector‘un ItemSource özelliğine BookList sınıfından yeni bir instance atıyoruz;

list.ItemsSource = new BookList();

Artık uygulamayı çalıştırabiliriz, aşağıdaki çıktıyı görüyor olmamız lazım;

Data Bind Sample screen shot