Application Bar in Windows Phone 7 Via WCF Service


Introduction

This concept allows the phone user to handle the task easily in a lightweight manner.

Question Arises: What is Application Bar?

An Application Bar is similar to the taskbar in our desktop computer systems. We will add a list of applications to our tray and it will be easy to operate some phone functionalities. It provides a good UI overriding the cluttered environment. Once we implement this concept we will get a better grip on this.

So, let's get it started!!!

The Complete Code of IService1.cs looks like this.

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace WCF_Application_Bar
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        double Add(double a, double b);
        [OperationContract]
        double Sub(double a, double b);
        [OperationContract]
        double Mul(double a, double b);
        [OperationContract]
        double Div(double a, double b);
        [OperationContract]
        string Menu();
    }
}

The Complete Code of Service1.svc.cs looks like this.

Code:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;
namespace WCF_Application_Bar

{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.

    public class Service1 : IService1

    {
        public double Add(double a, double b)

        {

            return a + b;

        }
        public double Sub(double a, double b)

        {

            return a - b;

        }
        public double Mul(double a, double b)

        {

            return a * b;

        }
        public double Div(double a, double b)

        {

            return a / b;

        }
        public string Menu()

        {

            return "Hurray!!!...I am from WCF for Menu Item";

        }
    }
}

 

The Complete Code of Web.Config looks like this.

 

Code:

<?xml version="1.0"?>
<configuration>
  <
system.web>
    <
compilation debug="true" targetFramework="4.0" />
  </system.web>
  <
system.serviceModel>
    <
behaviors>
      <
serviceBehaviors>
        <
behavior>
          <!--
To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <
serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true. 
              Set to false before deployment to avoid disclosing exception information
-->
          <
serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </
serviceBehaviors>
    </
behaviors>
    <
serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <
system.webServer>
    <
modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</
configuration>

 

The Complete Code of MainPage.xaml looks like this.

Code:

<phone:PhoneApplicationPage

    x:Class="Application_Bar.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"

    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="696"

    FontFamily="{StaticResource PhoneFontFamilyNormal}"

    FontSize="{StaticResource PhoneFontSizeNormal}"

    Foreground="{StaticResource PhoneForegroundBrush}"

    SupportedOrientations="Portrait" Orientation="Portrait"

    shell:SystemTray.IsVisible="True">
    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="Vijay's Application Bar" FontFamily="Verdana" FontSize="22" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="Windows 7 Phone" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>
        <!--ContentPanel - place additional content here-->

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

            <TextBlock Height="30" HorizontalAlignment="Left" Margin="44,45,0,0" Name="textBlock1" Text="Please Enter First Number"

                       FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />

            <TextBox Height="72" HorizontalAlignment="Left" Margin="336,19,0,0" Name="textBox1"  VerticalAlignment="Top" Width="114" />

            <TextBlock Height="30" HorizontalAlignment="Left" Margin="12,110,0,0" Name="textBlock2" Text="Please Enter Second Number"

                       FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />

            <TextBox Height="72" HorizontalAlignment="Left" Margin="336,84,0,0" Name="textBox2"  VerticalAlignment="Top" Width="114" />

            <TextBlock Height="30" HorizontalAlignment="Left" Foreground="Red" Margin="120,253,0,0" Name="textBlock3" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />

        </Grid>
    </Grid>
    <!--Sample code showing usage of ApplicationBar-->

    <phone:PhoneApplicationPage.ApplicationBar>

        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">

            <shell:ApplicationBarIconButton x:Name="Add1" IconUri="/appbar.add.rest.png" Text="Add" Click="Add1_Click"/>

            <shell:ApplicationBarIconButton x:Name="Sub1" IconUri="/appbar.minus.rest.png" Text="Sub" Click="Sub1_Click"/>

            <shell:ApplicationBarIconButton x:Name="Mul1" IconUri="/appbar.favs.rest.png" Text="Mul" Click="Mul1_Click"/>

            <shell:ApplicationBarIconButton x:Name="Div1" IconUri="/appbar.basecircle.rest.png" Text="Div" Click="Div1_Click"/>

            <shell:ApplicationBar.MenuItems>

                <shell:ApplicationBarMenuItem x:Name="Menu1" Text="WCF Message" Click="Menu1_Click"/>

            </shell:ApplicationBar.MenuItems>

        </shell:ApplicationBar>

    </phone:PhoneApplicationPage.ApplicationBar>
</
phone:PhoneApplicationPage>

 

 

The Complete Code of MainPage.xaml.cs looks like this.

Code:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using Microsoft.Phone.Controls;

using Application_Bar.ServiceReference1;
namespace Application_Bar

{
    public partial class MainPage : PhoneApplicationPage

    {
        // Constructor
        public MainPage()

        {

            InitializeComponent();

        }
        static void AddCall(object sender, AddCompletedEventArgs e)

        {

            MessageBox.Show(" The Addition Result is: " + e.Result.ToString());

        }
        private void Add1_Click(object sender, EventArgs e)

        {

            textBlock3.Text = "";

            if ((string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox2.Text)))

            {

                textBlock3.Text = "Please Enter Some Values";

            }

            else

            {

                Service1Client objClient = new Service1Client();

                objClient.AddCompleted += new EventHandler<AddCompletedEventArgs>(AddCall);

                objClient.AddAsync(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text));

                textBox1.Text = "";

                textBox2.Text = "";
            }
        }
        static void SubCall(object sender, SubCompletedEventArgs e)

        {

            MessageBox.Show(" The Substraction Result is: " + e.Result.ToString());

        }
        private void Sub1_Click(object sender, EventArgs e)

        {

            textBlock3.Text = "";

            if ((string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox2.Text)))

            {

                textBlock3.Text = "Please Enter Some Values";

            }

            else

            {

                Service1Client objClient = new Service1Client();

                objClient.SubCompleted += new EventHandler<SubCompletedEventArgs>(SubCall);

                objClient.SubAsync(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text));

                textBox1.Text = "";

                textBox2.Text = "";
            }
        }
        static void MulCall(object sender, MulCompletedEventArgs e)

        {

            MessageBox.Show(" The Multiplication Result is: " + e.Result.ToString());
        }
        private void Mul1_Click(object sender, EventArgs e)

        {

            textBlock3.Text = "";

            if ((string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox2.Text)))

            {

                textBlock3.Text = "Please Enter Some Values";

            }

            else

            {

                Service1Client objClient = new Service1Client();

                objClient.MulCompleted += new EventHandler<MulCompletedEventArgs>(MulCall);

                objClient.MulAsync(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text));

                textBox1.Text = "";

                textBox2.Text = "";

            }
        }
        static void DivCall(object sender, DivCompletedEventArgs e)

        {

            MessageBox.Show(" The Division Result is: " + e.Result.ToString());

        }
        private void Div1_Click(object sender, EventArgs e)

        {

            textBlock3.Text = "";

            if ((string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox2.Text)))

            {

                textBlock3.Text = "Please Enter Some Values";

            }

            else

            {

                Service1Client objClient = new Service1Client();

                objClient.DivCompleted += new EventHandler<DivCompletedEventArgs>(DivCall);

                objClient.DivAsync(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text));

                textBox1.Text = "";

                textBox2.Text = "";
            }
        }
        static void MenuCall(object sender, MenuCompletedEventArgs e)

        {

            MessageBox.Show(e.Result);

        }
        private void Menu1_Click(object sender, EventArgs e)

        {

            textBlock3.Text = "";

            Service1Client objClient = new Service1Client();

            objClient.MenuCompleted += new EventHandler<MenuCompletedEventArgs>(MenuCall);

            objClient.MenuAsync();

        }

    }

}

 

The Output of the Application looks like this:

vijay1.jpg

The Addition Operation Output Application looks like this:

v2.jpg

v3.jpg

v4.jpg

The Menu Operation Output Application looks like this:

v5.jpg

The Nothing Entered Output Application looks like this:

v6.jpg

I hope this article is useful for you. I look forward for your comments and feedback. Thanks Vijay Prativadi.