Click here to Skip to main content
15,896,063 members
Articles / Mobile Apps / Windows Phone 7

Custom Gauge Controls for Windows Phone 7: Part I

Rate me:
Please Sign up or sign in to vote.
4.91/5 (61 votes)
25 Feb 2013CPOL15 min read 144.4K   3.5K   78  
The first article in this series presents the implementation considerations and the way to use some custom gauges in WP7.
<phone:PhoneApplicationPage 
    x:Class="WPClientV2.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"
    xmlns:scada="clr-namespace:WPScadaControlsV2;assembly=WPScadaControlsV2"
   xmlns:loc="clr-namespace:WPClientV2"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    shell:SystemTray.IsVisible="True">
    <phone:PhoneApplicationPage.Resources>
        <loc:RangeColorConverter x:Key="conv" >
            <loc:ColorRange Minimum="20" Maximum="70" Color="Green"/>
            <loc:ColorRange Minimum="60" Maximum="90" Color="Red"/>
        </loc:RangeColorConverter>
    </phone:PhoneApplicationPage.Resources>
        <!--LayoutRoot contains the root grid where all other 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="24,24,0,12">
            <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="page name" Margin="-3,-8,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentGrid" Grid.Row="1" >
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Slider x:Name="slider" Value="20" Minimum="0" Maximum="400" Grid.Row="1" />
            <Slider x:Name="slider2" Value="75" Minimum="0" Maximum="200" Grid.Row="2" />
            <Grid Margin="20,20,20,100">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <!--<scada:RadialScale Grid.RowSpan="2" Grid.ColumnSpan="2"
                               RangeThickness="5" MinorTickStep="5" MajorTickStep="10"
                              MinAngle="-90" MaxAngle="180" 
                                   EnableLabelRotation="False"
                                   >
                    <scada:RadialScale.Ranges>
                        <scada:GaugeRange Color="Red" Offset="30" />
                        <scada:GaugeRange Color="Orange" Offset="40" />
                        <scada:GaugeRange Color="WhiteSmoke" Offset="60" />
                        <scada:GaugeRange Color="{StaticResource PhoneAccentColor}" Offset="100" />
                    </scada:RadialScale.Ranges>
                    
                    
                    <scada:RadialBarIndicator Value="{Binding ElementName=slider, Path=Value, Mode=TwoWay}" BarBrush="GreenYellow" BarThickness="20"/>
                    <scada:NeedleIndicator Value="20" Background="Red"/>
                    <scada:MarkerIndicator Value="40" />
                    
                </scada:RadialScale>-->
                <!--<scada:RadialScale MinAngle="100" MaxAngle="170" 
                                   SweepDirection="Counterclockwise" MinorTickStep="25" MajorTickStep="50" RadialType="Quadrant" Width="123" Height="122" Margin="80,16,16,26" Grid.Row="1"
                                   RangeThickness="4">
                    <scada:NeedleIndicator Value="{Binding ElementName=slider,Path=Value, Mode=TwoWay}" Background="GreenYellow"/>
                    <scada:RadialScale.Ranges>
                        <scada:GaugeRange Offset="100" Color="GreenYellow"/>
                    </scada:RadialScale.Ranges>
                    <scada:RadialScale.LabelTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding}" Foreground="GreenYellow" FontWeight="Bold"
                                       FontSize="16"/>
                        </DataTemplate>
                    </scada:RadialScale.LabelTemplate>
                </scada:RadialScale>-->
                
                
                <scada:RadialScale Grid.RowSpan="2" Grid.ColumnSpan="2"
                               RangeThickness="5" MinorTickStep="10" MajorTickStep="50"
                              MinAngle="-90" MaxAngle="90">
                    <scada:RadialScale.Ranges>
                        <scada:GaugeRange Color="Red" Offset="20" />
                        <scada:GaugeRange Color="Orange" Offset="40" />
                        <scada:GaugeRange Color="WhiteSmoke" Offset="60" />
                        <scada:GaugeRange Color="{StaticResource PhoneAccentColor}" Offset="100" />
                    </scada:RadialScale.Ranges>
                    <scada:RadialBarIndicator Value="{Binding ElementName=slider,Path=Value}" BarThickness="20" BarBrush="{StaticResource PhoneAccentBrush}" />
                    <scada:MarkerIndicator Value="50" />
                </scada:RadialScale>
                <scada:RadialScale Grid.RowSpan="2"  Grid.ColumnSpan="2"
                                   HorizontalAlignment="Center" UseRangeColorsForTicks="True"
                                   
                               RangeThickness="5" MinorTickStep="10" MajorTickStep="50"
                              MinAngle="90" MaxAngle="270" TickPlacement="Inward"
                                   EnableLabelRotation="False"
                                   Width="200" Margin="120,64,120,36">
                    <scada:RadialScale.MinorTickTemplate>
                        <DataTemplate>
                            <Rectangle Width="2" Height="8" Fill="{Binding Converter={StaticResource conv}}"/> 
                        </DataTemplate>
                    </scada:RadialScale.MinorTickTemplate>
                    <scada:RadialScale.Ranges>
                        <scada:GaugeRange Color="Red" Offset="20" />
                        <scada:GaugeRange Color="Orange" Offset="40" />
                        <scada:GaugeRange Color="WhiteSmoke" Offset="60" />
                        <scada:GaugeRange Color="{StaticResource PhoneAccentColor}" Offset="100" />
                    </scada:RadialScale.Ranges>
                    <scada:RadialBarIndicator Value="{Binding ElementName=slider2,Path=Value,Mode=TwoWay}" BarThickness="20" BarBrush="{StaticResource PhoneAccentBrush}" />
                    <scada:NeedleIndicator Value="{Binding ElementName=slider2,Path=Value,Mode=TwoWay}" Background="{Binding RelativeSource={RelativeSource Mode=Self},Path=Value,Converter={StaticResource conv}}"/>
                </scada:RadialScale>

                <!--<scada:RadialScale Grid.RowSpan="2" Grid.ColumnSpan="2"
                               RangeThickness="5" MinorTickStep="10" MajorTickStep="50"
                                   Maximum="400"
                              MinAngle="-90" MaxAngle="90">
                    <scada:RadialScale.Ranges>
                        <scada:GaugeRange Color="Red" Offset="20" />
                        <scada:GaugeRange Color="Orange" Offset="40" />
                        <scada:GaugeRange Color="WhiteSmoke" Offset="60" />
                        <scada:GaugeRange Color="{StaticResource PhoneAccentColor}" Offset="100" />
                    </scada:RadialScale.Ranges>
                    <scada:RadialBarIndicator Value="{Binding ElementName=slider,Path=Value}" BarThickness="20" BarBrush="{StaticResource PhoneAccentBrush}" />
                    
                </scada:RadialScale>-->
                
                <!--<scada:RadialScale RangeThickness="20" MinorTickStep="25" MajorTickStep="50"
                              MinAngle="91" MaxAngle="170" UseDefaultRange="False"
                                   RadialType="Quadrant" Maximum="200" TickPlacement="Outward"
                                   Margin="10,10,96,24" Grid.Column="1" Grid.Row="1"
                                   >
                    <scada:RadialScale.Ranges>
                        <scada:GaugeRange Color="White" Offset="40"/>
                    </scada:RadialScale.Ranges>
                    <scada:RadialScale.MinorTickTemplate>
                        <DataTemplate>
                            <Ellipse Fill="White" Width="5" Height="5"/>
                        </DataTemplate>
                    </scada:RadialScale.MinorTickTemplate>
                    <scada:RadialScale.MajorTickTemplate>
                        <DataTemplate>
                            <Ellipse Fill="Red" Width="5" Height="10"/>
                        </DataTemplate>
                    </scada:RadialScale.MajorTickTemplate>
                    
                    <scada:NeedleIndicator Value="{Binding ElementName=slider,Path=Value, Mode=TwoWay}" Background="White"/>
                </scada:RadialScale>-->
                <!--<scada:RadialScale RangeThickness="5" MinorTickStep="25" MajorTickStep="50"
                              MinAngle="110" MaxAngle="160" RadialType="Quadrant" SweepDirection="Counterclockwise"
                                   Width="130" Height="130" Margin="80,155,10,44" Grid.RowSpan="2">
                    <scada:RadialScale.Ranges>
                        <scada:GaugeRange Color="GreenYellow" Offset="50" />
                        <scada:GaugeRange Color="Gold" Offset="75" />
                        <scada:GaugeRange Color="Red" Offset="100" />
                    </scada:RadialScale.Ranges>
                    
                    <scada:RadialBarIndicator Value="{Binding ElementName=slider2,Path=Value, Mode=TwoWay}" BarBrush="Gold"
                                              BarThickness="60"/>
                </scada:RadialScale>
                <scada:RadialScale RangeThickness="5" MinorTickStep="25" MajorTickStep="50"
                              MinAngle="110" MaxAngle="160" RadialType="Quadrant" SweepDirection="Clockwise"
                                   Width="130" Height="130" Margin="10,157,80,42" Grid.Column="1" Grid.RowSpan="2">
                    <scada:RadialScale.Ranges>
                        <scada:GaugeRange Color="GreenYellow" Offset="50" />
                        <scada:GaugeRange Color="Gold" Offset="75" />
                        <scada:GaugeRange Color="Red" Offset="100" />
                    </scada:RadialScale.Ranges>

                    <scada:RadialBarIndicator Value="{Binding ElementName=slider2,Path=Value, Mode=TwoWay}" BarBrush="Gold"
                                              BarThickness="60"/>
                </scada:RadialScale>-->
            </Grid>
        </Grid>
        <!--<scada:LinearScale  Grid.Row="1" TickPlacement="BottomRight"
                      Width="60"     Orientation="Vertical" Margin="210,78,210,174">
            <scada:MarkerIndicator Value="{Binding ElementName=slider, Path=Value, Mode=TwoWay}"/>
        </scada:LinearScale>-->
    </Grid>
    
    <!-- Sample code showing usage of ApplicationBar
    <phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
            <shell:ApplicationBarIconButton x:Name="appbar_button1" IconUri="/Images/appbar_button1.png" Text="Button 1"></shell:ApplicationBarIconButton>
            <shell:ApplicationBarIconButton x:Name="appbar_button2" IconUri="/Images/appbar_button2.png" Text="Button 2"></shell:ApplicationBarIconButton>
            <shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem x:Name="menuItem1" Text="MenuItem 1"></shell:ApplicationBarMenuItem>
                <shell:ApplicationBarMenuItem x:Name="menuItem2" Text="MenuItem 2"></shell:ApplicationBarMenuItem>
            </shell:ApplicationBar.MenuItems>
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>
    -->


</phone:PhoneApplicationPage>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Romania Romania
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions