Adam Benoit

Windows Phone Development

Age Tracker: Source Code

Posted on

by Adam

Next up is the Settings.xaml file:

 <phone:PhoneApplicationPage 
    x:Class="AgeTracker.WP.Views.Settings"
    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:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:telerikInput="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Input" 
    xmlns:local="clr-namespace:AgeTracker.WP"

    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait"  Orientation="Portrait"
    shell:SystemTray.IsVisible="False" Loaded="PhoneApplicationPage_Loaded">

    <phone:PhoneApplicationPage.Resources>
        <local:AppSettings x:Key="appSettings"></local:AppSettings>
    </phone:PhoneApplicationPage.Resources>

    <!--LayoutRoot contains the root grid where all other page content is placed-->
    <Grid x:Name="LayoutRoot">
        <controls:Pivot Title="AGE TRACKER">
            <!--Panorama item one-->
            <controls:PivotItem Header="Person 1">
                <Grid>
                    <StackPanel>
                        <TextBlock Text="Name" Name="person1NameLabelTextBlock"  FontSize="24" Foreground="{StaticResource PhoneAccentBrush}" />
                        <TextBox Name="person1NameTextBox" Text="{Binding Source={StaticResource appSettings}, Path=Birthday1NameSetting, Mode=TwoWay}" />
                        <TextBlock Text="Birthdate" Name="Person1BirthdateLabelTextBlock"  FontSize="24" Foreground="{StaticResource PhoneAccentBrush}" />
                        <StackPanel Orientation="Horizontal">
                            <telerikInput:RadDatePicker x:Name="Birthday1RadDatePicker" Width="275" Value="{Binding Source={StaticResource appSettings}, Path=Birthday1DateSetting, Mode=TwoWay}"  />
                            <CheckBox Content="Use Time " Height="Auto" HorizontalAlignment="Left" Margin="10,0,0,0" Name="UseTime1CheckBox" VerticalAlignment="Top" IsChecked="{Binding Source={StaticResource appSettings}, Path=UseTime1CheckBoxSetting, Mode=TwoWay}" Checked="UseTime1CheckBoxChecked" Unchecked="UseTime1CheckBoxUnchecked" />
                        </StackPanel>
                        <telerikInput:RadTimePicker x:Name="Birthday1RadTimePicker" Value="{Binding Source={StaticResource appSettings}, Path=Birthday1TimeSetting, Mode=TwoWay}"  />
                    </StackPanel>
                </Grid>
            </controls:PivotItem>

            <!--PivotItem item two-->
            <controls:PivotItem Header="Person 2">
                <Grid>
                    <StackPanel>
                        <CheckBox Content="Enable This Person " 
                                  Height="Auto" 
                                  HorizontalAlignment="Left" 
                                  Margin="10,0,0,0" Name="UsePerson2CheckBox" 
                                  VerticalAlignment="Top" 
                                  IsChecked="{Binding Source={StaticResource appSettings}, Path=UsePerson2CheckBoxSetting, Mode=TwoWay}" Checked="UsePerson2CheckBoxChecked" Unchecked="UsePerson2CheckBoxUnchecked" />
                        <StackPanel Name="Person2StackPanel">
                            <TextBlock Text="Name" Name="person2NameLabelTextBlock"  FontSize="24" Foreground="{StaticResource PhoneAccentBrush}" />
                            <TextBox Name="person2NameTextBox" Text="{Binding Source={StaticResource appSettings}, Path=Birthday2NameSetting, Mode=TwoWay}" />
                            <TextBlock Text="Birthdate" Name="Person2BirthdateLabelTextBlock"  FontSize="24" Foreground="{StaticResource PhoneAccentBrush}" />
                            <StackPanel Orientation="Horizontal">
                                <telerikInput:RadDatePicker x:Name="Birthday2RadDatePicker" Width="275" Value="{Binding Source={StaticResource appSettings}, Path=Birthday2DateSetting, Mode=TwoWay}"  />
                                <CheckBox Content="Use Time " Height="Auto" HorizontalAlignment="Left" Margin="10,0,0,0" Name="UseTime2CheckBox" VerticalAlignment="Top" IsChecked="{Binding Source={StaticResource appSettings}, Path=UseTime2CheckBoxSetting, Mode=TwoWay}" Unchecked="UseTime2CheckBoxUnchecked" Checked="UseTime2CheckBoxChecked" />
                            </StackPanel>
                            <telerikInput:RadTimePicker x:Name="Birthday2RadTimePicker" Value="{Binding Source={StaticResource appSettings}, Path=Birthday2TimeSetting, Mode=TwoWay}"  />

                        </StackPanel>
                    </StackPanel>
                </Grid>
            </controls:PivotItem>

            <!--PivotItem item three-->
            <controls:PivotItem Header="Person 3">
                <Grid>
                    <StackPanel>
                        <CheckBox Content="Enable This Person " Height="Auto" HorizontalAlignment="Left" Margin="10,0,0,0" Name="UsePerson3CheckBox" VerticalAlignment="Top" IsChecked="{Binding Source={StaticResource appSettings}, Path=UsePerson3CheckBoxSetting, Mode=TwoWay}" Checked="UsePerson3CheckBoxChecked" Unchecked="UsePerson3CheckBoxUnchecked" />
                        <StackPanel Name="Person3StackPanel">
                            <TextBlock Text="Name" Name="person3NameLabelTextBlock"  FontSize="24" Foreground="{StaticResource PhoneAccentBrush}" />
                            <TextBox Name="person3NameTextBox" Text="{Binding Source={StaticResource appSettings}, Path=Birthday3NameSetting, Mode=TwoWay}" />
                            <TextBlock Text="Birthdate" Name="Person3BirthdateLabelTextBlock"  FontSize="24" Foreground="{StaticResource PhoneAccentBrush}" />
                            <StackPanel Orientation="Horizontal">
                                <telerikInput:RadDatePicker x:Name="Birthday3RadDatePicker" Width="275" Value="{Binding Source={StaticResource appSettings}, Path=Birthday3DateSetting, Mode=TwoWay}"  />
                                <CheckBox Content="Use Time " Height="Auto" HorizontalAlignment="Left" Margin="10,0,0,0" Name="UseTime3CheckBox" VerticalAlignment="Top" IsChecked="{Binding Source={StaticResource appSettings}, Path=UseTime3CheckBoxSetting, Mode=TwoWay}" Checked="UseTime3CheckBoxChecked" Unchecked="UseTime3CheckBoxUnchecked" />
                            </StackPanel>
                            <telerikInput:RadTimePicker x:Name="Birthday3RadTimePicker" Value="{Binding Source={StaticResource appSettings}, Path=Birthday3TimeSetting, Mode=TwoWay}"  />
                        </StackPanel>
                    </StackPanel>
                </Grid>
            </controls:PivotItem>
            </controls:Pivot>
    </Grid>

    <!--Panorama-based applications should not show an ApplicationBar-->

</phone:PhoneApplicationPage>

And its code behind Settings.xaml.cs file:

 using System;
using System.Windows;
using Microsoft.Phone.Controls;

namespace AgeTracker.WP.Views
{
    public partial class Settings : PhoneApplicationPage
    {
        bool _loaded;
        AppSettings _appSettings = new AppSettings();

        public Settings()
        {
            InitializeComponent();
        }

        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
            Birthday1RadDatePicker.MaxValue = DateTime.Now;
            Birthday1RadDatePicker.CancelButtonIconUri = new Uri("/Images/appbar.cancel.rest.png", UriKind.Relative);
            Birthday1RadDatePicker.OkButtonIconUri = new Uri("/Images/appbar.check.rest.png", UriKind.Relative);
            Birthday1RadTimePicker.CancelButtonIconUri = new Uri("/Images/appbar.cancel.rest.png", UriKind.Relative);
            Birthday1RadTimePicker.OkButtonIconUri = new Uri("/Images/appbar.check.rest.png", UriKind.Relative);

            Birthday2RadDatePicker.MaxValue = DateTime.Now;
            Birthday2RadDatePicker.CancelButtonIconUri = new Uri("/Images/appbar.cancel.rest.png", UriKind.Relative);
            Birthday2RadDatePicker.OkButtonIconUri = new Uri("/Images/appbar.check.rest.png", UriKind.Relative);
            Birthday2RadTimePicker.CancelButtonIconUri = new Uri("/Images/appbar.cancel.rest.png", UriKind.Relative);
            Birthday2RadTimePicker.OkButtonIconUri = new Uri("/Images/appbar.check.rest.png", UriKind.Relative);

            Birthday3RadDatePicker.MaxValue = DateTime.Now;
            Birthday3RadDatePicker.CancelButtonIconUri = new Uri("/Images/appbar.cancel.rest.png", UriKind.Relative);
            Birthday3RadDatePicker.OkButtonIconUri = new Uri("/Images/appbar.check.rest.png", UriKind.Relative);
            Birthday3RadTimePicker.CancelButtonIconUri = new Uri("/Images/appbar.cancel.rest.png", UriKind.Relative);
            Birthday3RadTimePicker.OkButtonIconUri = new Uri("/Images/appbar.check.rest.png", UriKind.Relative);

            _loaded = true;
            SetUIElementVisibility(Person2StackPanel, _appSettings.UsePerson2CheckBoxSetting);
            SetUIElementVisibility(Person3StackPanel, _appSettings.UsePerson3CheckBoxSetting);
            SetUIElementVisibility(Birthday1RadTimePicker, _appSettings.UseTime1CheckBoxSetting);
            SetUIElementVisibility(Birthday2RadTimePicker, _appSettings.UseTime2CheckBoxSetting);
            SetUIElementVisibility(Birthday3RadTimePicker, _appSettings.UseTime3CheckBoxSetting);

        }

        private void SetUIElementVisibility(UIElement control, bool visible)
        {
            if (_loaded)
            {
                if (visible)
                {
                    control.Visibility = Visibility.Visible;
                }
                else
                {
                    control.Visibility = Visibility.Collapsed;
                }
            }
        }

        private void UsePerson2CheckBoxChecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Person2StackPanel, true);
        }
        private void UsePerson2CheckBoxUnchecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Person2StackPanel, false);

        }

        private void UsePerson3CheckBoxChecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Person3StackPanel, true);
        }
        private void UsePerson3CheckBoxUnchecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Person3StackPanel, false);
        }

        private void UseTime1CheckBoxChecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Birthday1RadTimePicker, true);
        }
        private void UseTime1CheckBoxUnchecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Birthday1RadTimePicker, false);
        }

        private void UseTime2CheckBoxChecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Birthday2RadTimePicker, true);
        }
        private void UseTime2CheckBoxUnchecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Birthday2RadTimePicker, false);
        }

        private void UseTime3CheckBoxChecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Birthday3RadTimePicker, true);
        }
        private void UseTime3CheckBoxUnchecked(object sender, RoutedEventArgs e)
        {
            SetUIElementVisibility(Birthday3RadTimePicker, false);
        }
    }

}

And saving settings is driven by AppSettings.cs file:

 using System;
using System.IO.IsolatedStorage;
using System.Diagnostics;

namespace AgeTracker.WP
{
    public class AppSettings
    {

        // Our isolated storage settings
        IsolatedStorageSettings isolatedStore;

#region Person 1 Settings

        const string Birthday1DateSettingKeyName = "Birthday1DateSetting";
        const string Birthday1NameSettingKeyName = "Birthday1NameSetting";
        const string UseTime1CheckBoxSettingKeyName = "UseTime1CheckBoxSetting";
        const string Birthday1TimeSettingKeyName = "Birthday1TimeSetting";

        DateTime Birthday1DateSettingDefault = new DateTime(1970, 1, 1, 0, 0, 0);
        const string Birthday1NameSettingDefault = "Person 1";
        const bool UseTime1CheckBoxSettingDefault = true;
        DateTime Birthday1TimeSettingDefault = new DateTime(1970, 1, 1, 0, 0, 0);

        public string Birthday1NameSetting
        {
            get
            {
                return GetValueOrDefault<string>(Birthday1NameSettingKeyName, Birthday1NameSettingDefault);
            }
            set
            {
                AddOrUpdateValue(Birthday1NameSettingKeyName, value);
                Save();
            }
        }
        public DateTime Birthday1DateSetting
        {
            get
            {
                return GetValueOrDefault<DateTime>(Birthday1DateSettingKeyName, Birthday1DateSettingDefault);
            }
            set
            {
                AddOrUpdateValue(Birthday1DateSettingKeyName, value);
                Save();
            }
        }
        public bool UseTime1CheckBoxSetting
        {
            get
            {
                return GetValueOrDefault<bool>(UseTime1CheckBoxSettingKeyName, UseTime1CheckBoxSettingDefault);
            }
            set
            {
                AddOrUpdateValue(UseTime1CheckBoxSettingKeyName, value);
                Save();
            }
        }
        public DateTime Birthday1TimeSetting
        {
            get
            {
                return GetValueOrDefault<DateTime>(Birthday1TimeSettingKeyName, Birthday1TimeSettingDefault);
            }
            set
            {
                AddOrUpdateValue(Birthday1TimeSettingKeyName, value);
                Save();
            }
        }

#endregion 

#region Person 2 

        const string UsePerson2CheckBoxSettingKeyName = "UsePerson2CheckBoxSetting";
        const string Birthday2DateSettingKeyName = "Birthday2DateSetting";
        const string Birthday2NameSettingKeyName = "Birthday2NameSetting";
        const string UseTime2CheckBoxSettingKeyName = "UseTime2CheckBoxSetting";
        const string Birthday2TimeSettingKeyName = "Birthday2TimeSetting";

        const bool UsePerson2CheckBoxSettingDefault = false;
        DateTime Birthday2DateSettingDefault = new DateTime(1970, 1, 1, 0, 0, 0);
        const string Birthday2NameSettingDefault = "Person 2";
        const bool UseTime2CheckBoxSettingDefault = true;
        DateTime Birthday2TimeSettingDefault = new DateTime(1970, 1, 1, 0, 0, 0);

        public bool UsePerson2CheckBoxSetting
        {
            get
            {
                return GetValueOrDefault<bool>(UsePerson2CheckBoxSettingKeyName, UsePerson2CheckBoxSettingDefault);
            }
            set
            {
                AddOrUpdateValue(UsePerson2CheckBoxSettingKeyName, value);
                Save();
            }
        }
        public string Birthday2NameSetting
        {
            get
            {
                return GetValueOrDefault<string>(Birthday2NameSettingKeyName, Birthday2NameSettingDefault);
            }
            set
            {
                AddOrUpdateValue(Birthday2NameSettingKeyName, value);
                Save();
            }
        }
        public DateTime Birthday2DateSetting
        {
            get
            {
                return GetValueOrDefault<DateTime>(Birthday2DateSettingKeyName, Birthday2DateSettingDefault);
            }
            set
            {
                AddOrUpdateValue(Birthday2DateSettingKeyName, value);
                Save();
            }
        }
        public bool UseTime2CheckBoxSetting
        {
            get
            {
                return GetValueOrDefault<bool>(UseTime2CheckBoxSettingKeyName, UseTime2CheckBoxSettingDefault);
            }
            set
            {
                AddOrUpdateValue(UseTime2CheckBoxSettingKeyName, value);
                Save();
            }
        }
        public DateTime Birthday2TimeSetting
        {
            get
            {
                return GetValueOrDefault<DateTime>(Birthday2TimeSettingKeyName, Birthday2TimeSettingDefault);
            }
            set
            {
                AddOrUpdateValue(Birthday2TimeSettingKeyName, value);
                Save();
            }
        }
#endregion

#region Person 3 Settings

        const string UsePerson3CheckBoxSettingKeyName = "UsePerson3CheckBoxSetting";
        const string Birthday3DateSettingKeyName = "Birthday3DateSetting";
        const string Birthday3NameSettingKeyName = "Birthday3NameSetting";
        const string UseTime3CheckBoxSettingKeyName = "UseTime3CheckBoxSetting";
        const string Birthday3TimeSettingKeyName = "Birthday3TimeSetting";

        const bool UsePerson3CheckBoxSettingDefault = false;
        DateTime Birthday3DateSettingDefault = new DateTime(1970, 1, 1, 0, 0, 0);
        const string Birthday3NameSettingDefault = "Person 3";
        const bool UseTime3CheckBoxSettingDefault = true;
        DateTime Birthday3TimeSettingDefault = new DateTime(1970, 1, 1, 0, 0, 0);

        public bool UsePerson3CheckBoxSetting
        {
            get
            {
                return GetValueOrDefault<bool>(UsePerson3CheckBoxSettingKeyName, UsePerson3CheckBoxSettingDefault);
            }
            set
            {
                AddOrUpdateValue(UsePerson3CheckBoxSettingKeyName, value);
                Save();
            }
        }
        public string Birthday3NameSetting
        {
            get
            {
                return GetValueOrDefault<string>(Birthday3NameSettingKeyName, Birthday3NameSettingDefault);
            }
            set
            {
                AddOrUpdateValue(Birthday3NameSettingKeyName, value);
                Save();
            }
        }
        public DateTime Birthday3DateSetting
        {
            get
            {
                return GetValueOrDefault<DateTime>(Birthday3DateSettingKeyName, Birthday3DateSettingDefault);
            }
            set
            {
                AddOrUpdateValue(Birthday3DateSettingKeyName, value);
                Save();
            }
        }
        public bool UseTime3CheckBoxSetting
        {
            get
            {
                return GetValueOrDefault<bool>(UseTime3CheckBoxSettingKeyName, UseTime3CheckBoxSettingDefault);
            }
            set
            {
                AddOrUpdateValue(UseTime3CheckBoxSettingKeyName, value);
                Save();
            }
        }
        public DateTime Birthday3TimeSetting
        {
            get
            {
                return GetValueOrDefault<DateTime>(Birthday3TimeSettingKeyName, Birthday3TimeSettingDefault);
            }
            set
            {
                AddOrUpdateValue(Birthday3TimeSettingKeyName, value);
                Save();
            }
        }
#endregion

        public AppSettings()
        {
            try
            {
                // Get the settings for this application.
                isolatedStore = IsolatedStorageSettings.ApplicationSettings;

            }
            catch (Exception e)
            {
                Debug.WriteLine("Exception while using IsolatedStorageSettings: " + e.ToString());
            }
        }

        public bool AddOrUpdateValue(string Key, Object value)
        {
            bool valueChanged = false;

            // If the key exists
            if (isolatedStore.Contains(Key))
            {
                // If the value has changed
                if (isolatedStore[Key] != value)
                {
                    // Store the new value
                    isolatedStore[Key] = value;
                    valueChanged = true;
                }
            }
            // Otherwise create the key.
            else
            {
                isolatedStore.Add(Key, value);
                valueChanged = true;
            }

            return valueChanged;
        }

        public valueType GetValueOrDefault<valueType>(string Key, valueType defaultValue)
        {
            valueType value;

            // If the key exists, retrieve the value.
            if (isolatedStore.Contains(Key))
            {
                value = (valueType)isolatedStore[Key];
            }
            // Otherwise, use the default value.
            else
            {
                value = defaultValue;
            }

            return value;
        }

        public void Save()
        {
            isolatedStore.Save();
        }
    }
}

About Adam

Adam Benoit is a Quality Assurance Analyst, Contributing Author and Windows Phone Developer. View all posts by Adam →
This entry was posted in Applications, Development, Featured, Howto. Bookmark the permalink.

Comments are closed.