Blograby

Date Diff

Date Diff, named after the T-SQL DATEDIFF function, tells you how many days or weeks apart two dates are. This app requires very little code, thanks to the Silverlight for Windows Phone Toolkit.

The Silverlight for Windows Phone Toolkit, available at http://silverlight.codeplex.com, contains lots of rich controls and functionality leveraged throughout this book. It’s open source, so you can even tweak it relatively easily! This app makes use of its date picker control, which matches the date picker used by the phone’s built-in apps. It starts out looking like a text box, but it presents a rich full-page interface when tapped.

Future releases of the Silverlight for Windows Phone Toolkit may not be compatible with earlier releases!

The goal of the toolkit, besides providing developers with handy functionality, is to rapidly iterate on features that might become a part of the official Windows Phone Developer Tools in the future.Therefore, the team is not shy about making changes that can break code compiled against a previous version. Also, when features from the toolkit are added to the Windows Phone Developer Tools, they will likely be removed from the toolkit.

As long as you continue to use the same version of the toolkit in your apps, future changes should not cause you any trouble.The only thing to be careful about is upgrading the toolkit and recompiling your apps without thoroughly testing them.The apps in this book use the February 2011 release of the toolkit.

The Main Page

Date Diff’s only page (other than the page automatically presented by the date picker) is pictured in Figure 7.1. The user can customize the date in each date picker instance and then see the difference below.

FIGURE 7.1 The main page enables the selection of two dates and then shows the difference.

LISTING 7.1 MainPage.xaml—The User Interface for Date Diff’s Main Page

[code]

<phone:PhoneApplicationPage x:Class=”WindowsPhoneApp.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:toolkit=”clr-namespace:Microsoft.Phone.Controls;
➥assembly=Microsoft.Phone.Controls.Toolkit”
xmlns:local=”clr-namespace:WindowsPhoneApp”
FontFamily=”{StaticResource PhoneFontFamilyNormal}”
FontSize=”{StaticResource PhoneFontSizeNormal}”
Foreground=”{StaticResource PhoneForegroundBrush}”
SupportedOrientations=”PortraitOrLandscape”
shell:SystemTray.IsVisible=”True”>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height=”Auto”/>
<RowDefinition Height=”*”/>
</Grid.RowDefinitions>
<!– The standard header, with some tweaks –>
<StackPanel Margin=”24,16,0,12”>
<TextBlock Text=”DATE DIFF” Margin=”-1,0,0,0”
FontFamily=”{StaticResource PhoneFontFamilySemiBold}”
FontSize=”{StaticResource PhoneFontSizeMedium}”/>
<TextBlock Text=”pick two dates” Margin=”-3,-10,0,0”
FontFamily=”{StaticResource PhoneFontFamilySemiLight}”
FontSize=”{StaticResource PhoneFontSizeExtraExtraLarge}”/>
</StackPanel>
<StackPanel Grid.Row=”1”>
<!– Date #1 –>
<TextBlock Text=”Date #1” Margin=”24,17,24,-5”
Foreground=”{StaticResource PhoneSubtleBrush}”/>
<toolkit:DatePicker x:Name=”DatePicker1” Margin=”12,0”
local:Tilt.IsEnabled=”True” ValueChanged=”DatePicker_ValueChanged”/>
<!– Date #2 –>
<TextBlock Text=”Date #2” Margin=”24,17,24,-5”
Foreground=”{StaticResource PhoneSubtleBrush}”/>
<toolkit:DatePicker x:Name=”DatePicker2” Margin=”12,0”
local:Tilt.IsEnabled=”True” ValueChanged=”DatePicker_ValueChanged”/>
<!– The result –>
<TextBlock x:Name=”ResultTextBlock” Margin=”24,0”
FontSize=”{StaticResource PhoneFontSizeExtraLarge}”/>
</StackPanel>
</Grid>
</phone:PhoneApplicationPage>

[/code]

Notes:

The date picker requires two specific images to be included in your project!

The page shown by the date picker uses an application bar with the standard “done” and “cancel” buttons.However, you are responsible for including the two icon images in your project (and marking them with a Build Action of Content) with the proper names and location. If you fail to do this, you’ll see the standard error icons in their place.

The two icons must be named ApplicationBar.Check.png and ApplicationBar.Cancel.png, and they must be placed in a folder called Toolkit.Content in the root of your project.These image files are included with the Silverlight for Windows Phone Toolkit

This requirement is caused by the application bar’s limitation of only working with images marked as content. Listing 7.2 contains the

LISTING 7.2 MainPage.xaml.cs—The Code-Behind for Date Diff’s Main Page

[code]

using System;
using Microsoft.Phone.Controls;
namespace WindowsPhoneApp
{
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
}
void DatePicker_ValueChanged(object sender, DateTimeValueChangedEventArgs e)
{
// Do the calculation
TimeSpan span = this.DatePicker2.Value.Value – this.DatePicker1.Value.Value;
// Format the result
int days = span.Days;
int wholeWeeks = days / 7;
int remainder = days % 7;
string result = days + (Math.Abs(days) == 1 ? “ day” : “ days”);
if (Math.Abs(days) > 14)
{
result += “n(“ + wholeWeeks + “ weeks”;
if (remainder != 0)
result += “, “ + remainder
+ (Math.Abs(remainder) == 1 ? “ day” : “ days”);
result += “)”;
}
// Display the result
this.ResultTextBlock.Text = result;
}
}
}

[/code]

Notes:

The Finished Product

Exit mobile version