ARTICLE

Month UPDown Control In Silverlight 3

Posted by Diptimaya Patra Articles | XAML July 06, 2009
This is a Custom Control, called Month Up Down Control
Reader Level:
Download Files:
 

Introduction

This is a Custom Control that I have created, this is my first control. What this control will do? I guess this is very simple; it will just change the Month name on button up or down.
In our Sample Application we will just demonstrate how to use it.

Create a Silverlight Project

image1.gif

Figure 1.1 Creating Silverlight Project

Designing the Application

Here is an idea; we will have two buttons up and down, and one text box which will carry the text. I have used Blend 3 to design this. First I have created a path (using the Pen Tool) a triangle and made a copy of it so that I can use it for its reverse side.

image2.gif

Figure 1.2 Creating Triangle using Pen Tool

Then I Converted the Path into Buttons, and made two Buttons out of it; Up Button and Down Button. They will look similar to the following.

image3.gif

Figure 1.3 Up and Down Button

Adding a TextBox Control

Adding a text box is not that tough but I have made some changes to look familiar with the control. The following xaml code for the whole design will help you.

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:inputToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" x:Class="ControlSample.MainPage"
    Width="180" Height="52" Background="#FFE6EFF7">
<UserControl.Resources>
<
Style x:Key="UpButton" TargetType="Button">
                <Setter Property="Template">
                                <Setter.Value>
                                <ControlTemplate TargetType="Button">
                                <Grid>
                <vsm:VisualStateManager.VisualStateGroups>
                <vsm:VisualStateGroup x:Name="CommonStates">
                <vsm:VisualState x:Name="MouseOver"/>
                <vsm:VisualState x:Name="Normal"/>
               <
vsm:VisualState x:Name="Pressed"/>
                <vsm:VisualState x:Name="Disabled"/>
                </vsm:VisualStateGroup>
                <vsm:VisualStateGroup x:Name="FocusStates">
                <vsm:VisualState x:Name="Unfocused"/>
                <vsm:VisualState x:Name="Focused"/>
                </vsm:VisualStateGroup>
                </vsm:VisualStateManager.VisualStateGroups>
                <Path Stretch="Fill" Stroke="#FF000000" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" Data="M140,106 L201,106 L170,167 z">
                <Path.RenderTransform>
                <TransformGroup>
                <ScaleTransform/>
                <SkewTransform/>
                <RotateTransform Angle="180"/>
                <TranslateTransform/>
                </TransformGroup>
                </Path.RenderTransform>
                <Path.Fill>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FF96C7F1"/>
                <GradientStop Color="#FFFFFFFF" Offset="1"/>
                </LinearGradientBrush>
                </Path.Fill>
                </Path>
                </Grid>
                </ControlTemplate>
                </Setter.Value>
               </
Setter>
                </Style>
                <Style x:Key="DownButton" TargetType="Button">
                <Setter Property="Template">
                                <Setter.Value>
                                                <ControlTemplate TargetType="Button">
                                                <Grid>
                                                <vsm:VisualStateManager.VisualStateGroups>
                                                <vsm:VisualStateGroup x:Name="CommonStates">
                                                <vsm:VisualState x:Name="MouseOver"/>
                                                <vsm:VisualState x:Name="Normal"/>
                                                <vsm:VisualState x:Name="Pressed"/>
                                                <vsm:VisualState x:Name="Disabled"/>
                                                </vsm:VisualStateGroup>
                                                <vsm:VisualStateGroup x:Name="FocusStates">
                                                <vsm:VisualState x:Name="Unfocused"/>
                                                <vsm:VisualState x:Name="Focused"/>
                                                </vsm:VisualStateGroup>
                                                </vsm:VisualStateManager.VisualStateGroups>
<
Path Stretch="Fill" Stroke="#FF000000" UseLayoutRounding="False" Data="M140,106 L201,106 L170,167 z">
                                                <Path.Fill>
                                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                <GradientStop Color="#FF96C7F1"/>
                                                <GradientStop Color="#FFFFFFFF" Offset="1"/>
                                                </LinearGradientBrush>
                                                </Path.Fill>
                                                </Path>
                                                </Grid>
                                                </ControlTemplate>
                                </Setter.Value>
                                </Setter>
                                </Style>
                </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="#FFE4EDF5" VerticalAlignment="Top" Height="52" Width="180" HorizontalAlignment="Left">
                <Grid.RowDefinitions>
                                <RowDefinition Height="27"/>
                                <RowDefinition Height="25"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="128"/>
                                <ColumnDefinition Width="52"/>
                </Grid.ColumnDefinitions>
                <Button x:Name="btnDown" Height="22" HorizontalAlignment="Center"  Style="{StaticResource DownButton}" VerticalAlignment="Bottom" Width="48" Content="Button" Click="btnDown_Click" Grid.Column="1" Grid.Row="1"/>
                <Button x:Name="btnUp" HorizontalAlignment="Center"  Style="{StaticResource UpButton}" Width="48" Content="Button" Click="btnUp_Click" Grid.Column="1" VerticalAlignment="Top"/>
                <TextBox x:Name="txtMonth" Height="48" TextWrapping="NoWrap" HorizontalAlignment="Right" VerticalAlignment="Center" Width="Auto" FontSize="20" Text="January" Grid.RowSpan="2" IsReadOnly="True" TextAlignment="Center" BorderBrush="{x:Null}" Background="#FFD9E9F7"/>
    </Grid>
</
UserControl>


Logic to Display Month On Button Click

I have used the following logic:

private void btnDown_Click(object sender, RoutedEventArgs e)
        {
            switch (txtMonth.Text)
            {
                case "January":
                    txtMonth.Text = "December";
                    break;
                case "February":
                    txtMonth.Text = "January";
                    break;
                case "March":
                    txtMonth.Text = "February";
                    break;
                case "April":
                    txtMonth.Text = "March";
                    break;
                case "May":
                    txtMonth.Text = "April";
                    break;
                case "Jun":
                    txtMonth.Text = "May";
                    break;
                case "July":
                    txtMonth.Text = "Jun";
                    break;
                case "August":
                    txtMonth.Text = "July";
                    break;
                case "September":
                    txtMonth.Text = "August";
                    break;
                case "October":
                    txtMonth.Text = "September";
                    break;
                case "November":
                    txtMonth.Text = "October";
                    break;
                case "December":
                    txtMonth.Text = "November";
                    break;
                default:
                    break;
            }
      }

        private void btnUp_Click(object sender, RoutedEventArgs e)
        {
            switch (txtMonth.Text)
            {
                case "January":
                    txtMonth.Text = "February";
                    break;
                case "February":
                    txtMonth.Text = "March";
                case "March":
                    txtMonth.Text = "April";
                    break;
                case "April":
                    txtMonth.Text = "May";
                    break;
                case "May":
                    txtMonth.Text = "Jun";
                    break;
                case "Jun":
                    txtMonth.Text = "July";
                    break;
                case "July":
                    txtMonth.Text = "August";
                    break;
                case "August":
                    txtMonth.Text = "September";
                    break;
                case "September":
                    txtMonth.Text = "October";
                    break;
                case "October":
                    txtMonth.Text = "November";
                    break;
                case "November":
                    txtMonth.Text = "December";
                    break;
                case "December":
                    txtMonth.Text = "January";
                    break;
                default:
                    break;
            }
        }

Running the Application

When you click different images you will be notified by the PopUp Control.

image4.gif

Figure 1.4 Month UpDown Control is displayed

That's it, we have successfully created a Month UpDown Control. Enjoy Coding.

Login to add your contents and source code to this article
post comment
     
COMMENT USING
PREMIUM SPONSORS
Over-C is a holistic consortium of communications and technology specialists. We build, deploy and market both business as well as consumer products and solutions.
Get Career Advice from Experts
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.
Join a Chapter