Windows Phone Controls: Part 1

In this article, I will talk about some basic controls of Windows Phone and XAML, the main design language of Windows Phone.

Introduction

In this article, I will talk about some basic controls of Windows Phone and XAML, the main design language of Windows Phone. I think it will help you to understand the basic principle of XAML, how it works, its attributes and uses. So let's crack it, the essential XAML controls for Windows Phone.

XAML makes your life much easier. Previously, you needed to design many pages with the same alignment and it was hectic and frustrating, also not that easy. But XAML brings you the ability to make your design portable and easy to arrange. You can copy paste your design and reuse it wherever you want. It's not all, you can shape your design to whatever you like to do and the power is now in your hand. Now let's see what kind of simple controls you can use in your Windows Phone application.

Creating a new project

First of all, we will create a project. Open Visual Studio and open a “New Project”. Select “Blank App” and name it “WindowsPhoneControls”.

blank app
                                                                           Figure 1

Click OK and you can see Visual Studio like the following.

main page xml
                                                                              Figure 2

If you don't have the experience of Windows Phone Apps, feel free to see the blog I wrote, Windows Phone – Hello world. Take some time and follow the procedure. I think it'll help you.

Working with HyperlinkButton

Previously, we have worked with simple Button controls in our “Hello world” application. Now, we'll work with another Button like control called “HeyperLinkButton”. It's used to link a URL or some other things you like.

To do that, you can see Toolbox in the left side of the Visual Studio and you can find it in “All XAML Controls” section. Click on this control and drag it to you design. Like this:

hyperlink button
                                                Figure 3

Now, to ensure it works, we need another TextBlock control. To do so, drag it from the Toolbox and put it below the Hyperlink button. The designing code is given below.

  1. <!--Hyperlink Button-->  
  2. <HyperlinkButton x:Name="HyperlinkButton_1"   
  3.                  Content="HyperlinkButton"   
  4.                  HorizontalAlignment="Left"  
  5.                  VerticalAlignment="Top"  
  6.                  Margin="10,10,0,0"      
  7.                  Click="HyperlinkButton_1_Click"/>  
  8.   
  9. <TextBlock x:Name="HB_TextBlock"  
  10.            HorizontalAlignment="Left"  
  11.            VerticalAlignment="Top"  
  12.            Margin="10,10,0,0"  
  13.            TextWrapping="Wrap"                    
  14.            Height="40"  
  15.            Width="140"  
  16.            FontSize="24" Grid.Column="1"/>  
Listing 1

Here, in HyperlinkButton we have an event controller named HyperlinkButton_1_Click, it creates a code block that will handle the background task, when you will click in the hyper link Button and we will show a confirmation message in the TextBlock named HB_TextBlock.

Making Grid

We have made some Grids in our main Grid, to arrange the controls in these Grids like Grid 1, 2 and so on.

You can make Grids wherever you want, you can customize the Grid as you need to.

Making Grid
                                       Figure 4

Like the picture above, just put your mouse curser on these points and just click above the Main Grid and it will create Grids automagically, also generate the code for making Grids in XAML.

Now, open MainPage.xaml.cs and put the code below the constructor.
  1. private void HyperlinkButton_1_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.       HB_TextBlock.Text = "OK";  
  4. }  
Listing 2

Now run the application and it will look like the picture below, you will then click in the HyperlinkButton.

page output
                                       Figure 5

Working with RadioButton

Well if you can do that, then you are on the move. Now, we take another control, a RadioButton, and drag it from the TextBlock and put it in another Grid and also a TextBlock in Row 1. The customized code will look like this, or you can simply drag a control and test separately, it's up to you. I suggest you to do as I do.

So, our design will look like this:

radio button
                                       Figure 6

And the designing code is the following:
  1. <!--Radio Button-->  
  2. <RadioButton x:Name="RadioButton_1"  
  3.              Content="RadioButton"  
  4.              HorizontalAlignment="Left"  
  5.              Margin="10,10,0,0"  
  6.              Grid.Row="1"  
  7.              VerticalAlignment="Top"  
  8.              Checked="RadioButton_1_Checked"/>  
  9.   
  10. <TextBlock x:Name="RB_TextBlock"  
  11.            HorizontalAlignment="Left"  
  12.            VerticalAlignment="Top"  
  13.            Margin="10,10,0,0"  
  14.            TextWrapping="Wrap"                    
  15.            Height="40"  
  16.            Width="140"  
  17.            FontSize="24"  
  18.            Grid.Column="1"  
  19.            Grid.Row="1"/>  
Listing 3

Here, like HyperlinkButton, in our RadioButton we have also an event handler named RadioButton_1_Checked and in our event handler we will show the confirmation message of whether it's checked or unchecked.
  1. private void RadioButton_1_Checked(object sender, RoutedEventArgs e)  
  2. {  
  3.       if (RadioButton_1.IsChecked == true)  
  4.       {  
  5.             RB_TextBlock.Text = "Checked";  
  6.       }  
  7.       else  
  8.       {   
  9.             RB_TextBlock.Text = "Not checked";  
  10.       }  
  11. }  
Listing 4

Here, we're checking whether or not our RadioButton is checked, if it's checked (true), the TextBlock will show “Checked” or if it's unchecked (false), the TextBox will show “Not checked”.

After you run your application, it'll look exactly like this.

show radio button
                                       Figure 7

Working with TextBlock

Another control, we rapidly use in our every application is TextBlock. We've used it in our previous controls also. We will show static data in our TextBlock, for example “Hello world”.

The design will look like this.

hellow word
                                    Figure 8

The design code is the following:
  1. <!--Text Block-->  
  2. <TextBlock Text="Hello world"  
  3.            HorizontalAlignment="Left"  
  4.            Margin="10,10,0,0"  
  5.            Grid.Row="2"  
  6.            TextWrapping="Wrap"  
  7.            VerticalAlignment="Top"  
  8.            Height="40"  
  9.            Width="380"  
  10.            FontSize="24" Grid.ColumnSpan="2"/>  
Listing 5

We don't need any Button or event handler in this case, because the text is given statically in the design (Text=”Hello world”).

After you run your application, it'll look exactly like this.

page design
                                    Figure 9

Working with ToggleSwitch

Another control we'll talk about is ToggleSwitch. It's really a beautiful control that will make your application cooler than before. I think you know, how use a control now, we have done it before. So, just take this control and take another TextBlock and the design will look like this.

toggle Switch
                                    Figure 10

The design code is the following,
  1. <!--Toggle Switch-->  
  2. <ToggleSwitch x:Name="ToggleSwitch_1"  
  3.               Header="ToggleSwitch"  
  4.               Margin="10,9.5,6,0"  
  5.               Grid.Row="3"  
  6.               VerticalAlignment="Top"  
  7.               Toggled="ToggleSwitch_1_Toggled"/>  
  8.   
  9. <TextBlock x:Name="TS_TextBlock"  
  10.            HorizontalAlignment="Left"  
  11.            VerticalAlignment="Top"  
  12.            Margin="10,9.5,0,0"  
  13.            TextWrapping="Wrap"                    
  14.            Height="40"  
  15.            Width="140"  
  16.            FontSize="24"  
  17.            Grid.Column="1"  
  18.            Grid.Row="3"/>  
Listing 6

We have an event handler here, so the C# code is given below:
  1. private void ToggleSwitch_1_Toggled(object sender, RoutedEventArgs e)  
  2. {  
  3.       if (ToggleSwitch_1.IsOn == true)  
  4.       {  
  5.             TS_TextBlock.Text = "This is On";  
  6.       }  
  7.       else  
  8.       {  
  9.             TS_TextBlock.Text = "This is Off";  
  10.       }  
  11. }  
Listing 7

We did the same logic here like the RadioButton.

After you run your application, it'll look exactly like this.

toggle switch onoff
                                          Figure 11

Working with ListBox

Our fifth control will be ListBox, its data binding control. It's an important control that has some complicated structure. So let's see how, we can use it in our application.

Like other controls drag it from the Toolbox and put it in the Grid. Here, we need a Button and TextBlock controls.

The design will look like this:

listbox
                                 Figure 12

The designing code is given below.
  1. <!--List Box-->  
  2. <ListBox x:Name="ListBox_1"  
  3.          HorizontalAlignment="Left"  
  4.          Height="120"  
  5.          Margin="10,10.167,0,0"  
  6.          Grid.Row="4"  
  7.          VerticalAlignment="Top"  
  8.          Width="220"  
  9.          ScrollViewer.VerticalScrollBarVisibility="Visible">  
  10.     <ListBoxItem Content="January"/>  
  11.     <ListBoxItem Content="February"/>  
  12.     <ListBoxItem Content="March"/>  
  13.     <ListBoxItem Content="April"/>  
  14.     <ListBoxItem Content="May"/>  
  15.     <ListBoxItem Content="June"/>  
  16.     <ListBoxItem Content="July"/>  
  17.     <ListBoxItem Content="August"/>  
  18.     <ListBoxItem Content="September"/>  
  19.     <ListBoxItem Content="October"/>  
  20.     <ListBoxItem Content="November"/>  
  21.     <ListBoxItem Content="December"/>  
  22. </ListBox>  
  23.   
  24. <Button Content="Ok"  
  25.         x:Name="Ok"  
  26.         Grid.Column="1"  
  27.         HorizontalAlignment="Left"  
  28.         Margin="10,0.167,0,0"  
  29.         Grid.Row="4"  
  30.         VerticalAlignment="Top"  
  31.         Width="125"  
  32.         Click="Ok_Click"/>  
  33.   
  34. <TextBlock x:Name="LB_TextBlock"  
  35.            HorizontalAlignment="Left"  
  36.            VerticalAlignment="Top"  
  37.            Margin="10,53.167,0,0"  
  38.            TextWrapping="Wrap"                    
  39.            Height="77"  
  40.            Width="140"  
Listing 8

Here, we have an event handler named “Ok_Click”, and we have bound some month's name inside the ListBox's starting and closing tags. The TextBlock's name is LB_TextBlock. So, the C# code will look like this.
  1. private void Ok_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.       string[] month = { "January""February""March""April""May""June""July""August""September""October""November""December" };  
  4.       if (ListBox_1.SelectedValue != null)  
  5.       {  
  6.             LB_TextBlock.Text = month[ListBox_1.SelectedIndex];  
  7.       }  
  8.       else  
  9.       {  
  10.             LB_TextBlock.Text = "Select a item from list.";  
  11.       }  
Listing 9

Here, we have created a string Array named month and the array index's values are the month's name. In the if decision statement, first we're checking if the ListBlock is selected or not, if an item is selected we're matching the SelectedIndex's value with our array Index's value and if no item's selected then a alert message will be shown in the TextBlock.

If we run the application, it will look exactly like this:

show list
                                 Figure 13

Working with ComboBox

Now, we'll talk about a similar control and it's really awesome; it just works exactly the same as a ListBox but it depends on your application whether it is more appropriate deending on your needs. It's called a ComboBox. Take it from the ToolBox or you can just write XAML on your own, like or something like that. So, the design will look like this:

combobox
                                 Figure 14

The designing code is given below.
  1. <!--Combo Box-->  
  2. <ComboBox x:Name="ComboBox_1"  
  3.           HorizontalAlignment="Left"  
  4.           Margin="10,0.167,0,0"  
  5.           Grid.Row="5"  
  6.           VerticalAlignment="Top"  
  7.           Width="220">  
  8.     <ComboBoxItem Content="January"/>  
  9.     <ComboBoxItem Content="February"/>  
  10.     <ComboBoxItem Content="March"/>  
  11.     <ComboBoxItem Content="April"/>  
  12.     <ComboBoxItem Content="May"/>  
  13.     <ComboBoxItem Content="June"/>  
  14.     <ComboBoxItem Content="July"/>  
  15.     <ComboBoxItem Content="August"/>  
  16.     <ComboBoxItem Content="September"/>  
  17.     <ComboBoxItem Content="October"/>  
  18.     <ComboBoxItem Content="November"/>  
  19.     <ComboBoxItem Content="December"/>  
  20. </ComboBox>  
  21.   
  22. <TextBlock x:Name="CB_TextBlock"  
  23.            HorizontalAlignment="Left"  
  24.            VerticalAlignment="Top"  
  25.            Margin="10,65.167,0,0"  
  26.            TextWrapping="Wrap"                    
  27.            Height="40"  
  28.            Width="380"  
  29.            FontSize="24"  
  30.            Grid.Row="5" Grid.ColumnSpan="2"/>  
  31.   
  32. <Button Content="Ok"  
  33.         x:Name="Ok_1"  
  34.         Grid.Column="1"  
  35.         HorizontalAlignment="Left"  
  36.         Margin="10,0.167,0,0"  
  37.         Grid.Row="5"  
  38.         VerticalAlignment="Top"  
  39.         Width="125"  
  40.         Click="Ok_1_Click"/>  
Listing 10

And the C# code is here.
  1. private void Ok_1_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.       string[] month = { "January""February""March""April""May""June""July""August""September""October""November""December" };  
  4.       if (ComboBox_1.SelectedValue != null)  
  5.       {  
  6.             CB_TextBlock.Text = month[ComboBox_1.SelectedIndex];  
  7.       }  
  8.       else  
  9.       {  
  10.             CB_TextBlock.Text = "Select a item from list.";  
  11.       }  
  12. }  
Listing 11

If we run the application, it'll look exactly like this.

show combo box
                                                                           
Adding a User Control

And lastly, we'll talk about a Popup Box with a Button control and it will show some messages. For this, we need a User Control. Go to the Solution Explorer and Add >> New Item.

add url control
                                                                              Figure 17

Now you've to select User Control and provide it a name called “PopupPanel”.

user control
                                                                           Figure 18

Customize the XAML code, mainly the Grid section.
  1. <Grid>  
  2.     <Border BorderBrush="{StaticResource ApplicationForegroundThemeBrush}" BorderThickness="1" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">  
  3.         <Border BorderBrush="{StaticResource ApplicationForegroundThemeBrush}" BorderThickness="1">  
  4.             <Border BorderBrush="{StaticResource ApplicationForegroundThemeBrush}" BorderThickness="1">  
  5.                 <Border BorderBrush="{StaticResource ApplicationForegroundThemeBrush}" BorderThickness="1">  
  6.                     <StackPanel Orientation="Vertical" Height="200" Width="200" VerticalAlignment="Center">  
  7.                         <TextBlock Text="This is a Popup!" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,60,0,0"/>  
  8.                         <TextBlock Text="Hit the button again to hide me" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,10,0,0" TextWrapping="Wrap" TextAlignment="Center"/>  
  9.                         <Button HorizontalAlignment="Center" Content="Close Popup" Click="ClosePopup" />  
  10.                     </StackPanel>  
  11.                 </Border>  
  12.             </Border>  
  13.         </Border>  
  14.     </Border>  
  15. </Grid>  
Listing 12

Here, we've a Border brush and a StacPanel that will bound the TextBlocks and a Button. The design will look like this:

close popup
                                                                                Figure 19

The C# code of PopupPanel.xaml.cs is given below. It's mainly the Button's event handler.
  1. private void ClosePopup(object sender, RoutedEventArgs e)  
  2. {  
  3.       Popup hostPopup = this.Parent as Popup;  
  4.       hostPopup.IsOpen = false;  
  5. }  
Listing 13

We just made our first User Control. It's really helpful when you need a custom control in your application.

Working with Popup Window

Now, in our MainPage.xaml, we need to take a TextBlock that will have a header message called “Popup Window” and a Button that the content is “Show Popup”. The design will look like this:

popup window
                                 Figure 20

The design code is given below.
  1. <!--Popup Window-->  
  2. <TextBlock HorizontalAlignment="Left"  
  3.            Text="Popup Winodow"  
  4.            VerticalAlignment="Top"  
  5.            Margin="10,10,0,0"  
  6.            TextWrapping="Wrap"                    
  7.            Height="40"  
  8.            Width="220"  
  9.            FontSize="24"  
  10.            Grid.Row="6"/>  
  11.   
  12. <Button Content="Show Popup"  
  13.         x:Name="PopupButton"  
  14.         Grid.Column="1"  
  15.         HorizontalAlignment="Left"  
  16.         Margin="10,0,0,0"  
  17.         Grid.Row="6"  
  18.         VerticalAlignment="Top"  
  19.         Width="140"  
  20.         Click="PopupButton_Click"/>  
Listing 14

Our event handler C# code behind is also given here.
  1. private void PopupButton_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.       if (!popup.IsOpen)  
  4.       {  
  5.             popup.Child = new PopupPanel();  
  6.             popup.VerticalOffset = 250.0;  
  7.             popup.HorizontalOffset = 100.0;  
  8.             popup.IsOpen = true;  
  9.       }  
  10. }  
  11.   
  12. Popup popup = new Popup();  
Listing 15

Here, we have created a new object of Popup window and checked it in our event handler code block by the if decision statement. We have created a Popup Child object and set its position and made IsOpen equal to true, so that it shows up when it's called.

If we run the application, it'll look exactly like this.

show close popup
                                 Figure 21

Finalizing and running our Control application

In the end, our full design will look like the picture below.

control application
                                       Figure 22

And if we run the complete application, it'll look exactly like this.

show all controls
                                 Figure 23

Summary

Well, today we've talked about seven controls and their uses. Hopefully, it'll give you a little idea how to use controls and modify with XAML in Windows Phone 8.1 applications. I think, I can help you just a little to move on with XAML. I hope you like it. Next time, I'll be back with other controls. Until then, good bye. Have a nice day.

Happy coding.

You can read the original article at: Windows Phone Controls – Part 1