Color Slider in Windows Phone 7 Via WCF Service


Introduction
 
First before we begin start working with the Color Slider, we need to download the Coding4Fun Toolkit from http://coding4fun.codeplex.com/. Later add Coding4Fun.Phone.Controls.dll as a reference for our newly created project.
 
Today, in this article let's learn another new concept related to Window Phone 7, whereby communicating with WCF Service to perform some operation.
 
Question: What is a Color Slider?
 
In simple terms "It provides a slider which is a way to access the required color from color space".
 
Let's get this started off now!!!
 
Step 1: The complete code of the IService1.cs looks like this:
 
 
using System;
 
using System.Collections.Generic;
 
using System.Linq;
 
using System.Runtime.Serialization;
 
using System.ServiceModel;
 
using System.ServiceModel.Web;
 
using System.Text;
 
using SilverlightApplication1;
  
 
namespace WCF_Color_Slider_Application
 {
    
// 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] string colorName(string a);
     }
 }

 
Step 2: The complete code of the Service1.svc.cs looks like this:
 
 
using System;
 
using System.Collections.Generic;
 
using System.Linq;
 
using System.Runtime.Serialization;
 
using System.ServiceModel;
 
using System.ServiceModel.Web;
 
using System.Text;
 
using SilverlightApplication1;
  
 
namespace WCF_Color_Slider_Application
 {
    
// 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 string colorName(string a)
         {
             return a;
         }
     }
 }

 
Step 3: The complete code of the Web.Config looks like this:
 
 
<?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>
 
Step 4: The complete code of the MainPage.xaml looks like this:
 
 
<phone:PhoneApplicationPage x:Class="Color_Slider_Application.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="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource
 PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait"
 Orientation="Portrait" shell:SystemTray.IsVisible="True" Loaded="PhoneApplicationPage_Loaded">
 

    
<!--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="Color Slider Application" 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">
 
            <Ellipse Height="69" HorizontalAlignment="Left" Margin="295,107,0,0" Name="ellipse1" Stroke="Black"StrokeThickness="1" VerticalAlignment="Top" Width="139" />
 
            <TextBox Height="72" HorizontalAlignment="Left" Margin="277,6,0,0" Name="textBox1"
 VerticalAlignment="Top" Width="173" />
 
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="16,28,0,0" Name="textBlock1" Text="Your
 Selected Color # "
FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />
 
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="16,133,0,0" Name="textBlock2" Text="Your
 Selected Color is: "
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 IconUri="/Images/appbar_button1.png" Text="Button 1"/>
     <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/>
     <shell:ApplicationBar.MenuItems>
     <shell:ApplicationBarMenuItem Text="MenuItem 1"/>
     <shell:ApplicationBarMenuItem Text="MenuItem 2"/>
     </shell:ApplicationBar.MenuItems>
     </shell:ApplicationBar>
     </phone:PhoneApplicationPage.ApplicationBar>-->
 
</phone:PhoneApplicationPage>
 
Step 5: The complete code of the MainPage.xaml.cs looks like this:
 
 
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 Coding4Fun.Phone.Controls;
 
using Color_Slider_Application.ServiceReference1;
 
using SilverlightApplication1;
  
 
namespace Color_Slider_Application
 {
     public partial class MainPage : PhoneApplicationPage
     {
    
// Constructor
 
    public MainPage()
     {
         InitializeComponent();
     }
     private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
     {
         objSlider.Height = 100;
         objSlider.Width = 450;
         objSlider.Orientation = System.Windows.Controls.Orientation.Horizontal;
         objSlider.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
         objSlider.VerticalAlignment = System.Windows.VerticalAlignment.Center;
         objSlider.ColorChanged +=new ColorBaseControl.ColorChangedHandler(color_Call);
         this.ContentPanel.Children.Add(objSlider);
     }
     private void colorName_Call(object sender, colorNameCompletedEventArgs e)
     {
         textBox1.Text = e.Result;
     }
     private void color_Call(object sender, Color newcolor)
     {
         objClient.colorNameCompleted += new EventHandler<colorNameCompletedEventArgs>(colorName_Call);
         objClient.colorNameAsync(newcolor.ToString());
         ellipse1.Fill = new SolidColorBrush(newcolor);
     }
 
    #region Instance Variables ColorSlider objSlider = new ColorSlider();
     Service1Client objClient = new Service1Client();
 
    #endregion
     }
 }

 
Step 6: The output of the application looks like this:

ColorSlider1.png
Step 7: The output of the Color Chosen Application looks like this:

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