SIGN UP MEMBER LOGIN:    
ARTICLE

Application Bar in Windows Phone 7 Via WCF Service

Posted by Vijay Prativadi Articles | Windows Phone in C# January 29, 2012
Today, in this article let’s play around with a good application bar concept in Windows Phone whereby messages are communicated using a WCF Service.
Reader Level:

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.

Login to add your contents and source code to this article
share this article :
post comment
 

Thanks Stephen !!!

Posted by Vijay Prativadi Feb 02, 2012

Thanks Sonakshi!!!

Posted by Vijay Prativadi Feb 02, 2012

Its a very good and useful article.

Posted by Stephen Johnson Jan 31, 2012

Good presentation

Posted by Sonakshi Singh Jan 31, 2012
Team Foundation Server Hosting
Become a Sponsor
PREMIUM SPONSORS
  • Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
    The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
Nevron Gauge for SharePoint
Become a Sponsor