Click here to Skip to main content
15,897,968 members
Articles / Desktop Programming / WPF

WPF Map App: WPF Meets Google Geocoding and Static Maps APIs

Rate me:
Please Sign up or sign in to vote.
4.81/5 (21 votes)
16 Aug 2011CPOL6 min read 113.5K   12.4K   67  
How to use the Google Geocoding and Static Maps APIs with a WPF application.
<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF Map App" Height="534" Width="534" WindowStyle="None" AllowsTransparency="True" Background="{x:Null}" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" WindowStartupLocation="CenterScreen">
	<Window.Resources>
		<Style x:Key="CloseButtonStyle" BasedOn="{x:Null}" TargetType="{x:Type Button}">
			<Setter Property="Template">
				<Setter.Value>
					<ControlTemplate TargetType="{x:Type Button}">
						<Grid>
							<Viewbox x:Name="Close">
								<Canvas Width="15.4167" Height="15.5001">
									<Path x:Name="Rect1" Width="15.4167" Height="15.5001" Canvas.Left="0" Canvas.Top="0" Stretch="Fill" Fill="#00000000" Data="F1 M 2,0L 13.4167,0C 14.5212,0 15.4167,0.895447 15.4167,2L 15.4167,13.5001C 15.4167,14.6046 14.5212,15.5001 13.4167,15.5001L 2,15.5001C 0.895447,15.5001 0,14.6046 0,13.5001L 0,2C 0,0.895447 0.895447,0 2,0 Z "/>
									<Path x:Name="X1" Width="15.001" Height="15.001" Canvas.Left="0.209" Canvas.Top="0.235" Stretch="Fill" Fill="#FF000000" Data="F1 M 14.7216,0.723328C 15.3725,1.37421 15.3725,2.4295 14.7216,3.08038L 10.0667,7.73535L 14.7218,12.3905C 15.3727,13.0414 15.3726,14.0966 14.7217,14.7475C 14.0709,15.3984 13.0156,15.3984 12.3647,14.7475L 7.70959,10.0924L 3.05438,14.7476C 2.4035,15.3985 1.34827,15.3985 0.697388,14.7476C 0.0465088,14.0967 0.0465088,13.0414 0.697388,12.3906L 5.3526,7.73541L 0.697449,3.08026C 0.0465698,2.42938 0.0465698,1.37415 0.697449,0.723267C 1.34833,0.0723877 2.40363,0.0723877 3.0545,0.723267L 7.70966,5.37836L 12.3646,0.723328C 13.0155,0.0724487 14.0707,0.0724487 14.7216,0.723328 Z "/>
									<Path x:Name="X2" Width="13.6364" Height="13.6351" Canvas.Left="0.891403" Canvas.Top="0.91861" Stretch="Fill" Fill="#FFD7D7D7" Data="F1 M 1.19855,1.2243C 1.60614,0.816711 2.26715,0.816711 2.67474,1.2243L 7.70966,6.25922L 12.7444,1.22443C 13.152,0.816711 13.813,0.816711 14.2207,1.22437C 14.6284,1.63202 14.6284,2.29303 14.2206,2.70062L 9.18585,7.73541L 14.222,12.7716C 14.6297,13.1793 14.6297,13.8402 14.222,14.2479C 13.8143,14.6556 13.1535,14.6556 12.7458,14.2479L 7.70966,9.21173L 2.67346,14.2479C 2.26575,14.6556 1.6048,14.6556 1.19714,14.2479C 0.78949,13.8403 0.78949,13.1793 1.19714,12.7716L 6.23334,7.73541L 1.19855,2.70062C 0.790894,2.29297 0.790833,1.63202 1.19855,1.2243 Z "/>
								</Canvas>
							</Viewbox>
						</Grid>
						<ControlTemplate.Triggers>
							<Trigger Property="IsMouseOver" Value="True">
								<Setter Property="Fill" TargetName="X2" Value="#FF67C8FF"/>
							</Trigger>
							<Trigger Property="IsDefaulted" Value="True"/>
							<Trigger Property="IsMouseOver" Value="True"/>
							<Trigger Property="IsPressed" Value="True"/>
							<Trigger Property="IsEnabled" Value="False"/>
						</ControlTemplate.Triggers>
					</ControlTemplate>
				</Setter.Value>
			</Setter>
		</Style>
		<Style x:Key="MinimizeButtonStyle" BasedOn="{x:Null}" TargetType="{x:Type Button}">
			<Setter Property="Template">
				<Setter.Value>
					<ControlTemplate TargetType="{x:Type Button}">
						<Grid>
							<Viewbox x:Name="Minimize">
								<Canvas Width="15.4166" Height="15.5">
									<Path x:Name="Rect" Width="15.4166" Height="15.5" Canvas.Left="0" Canvas.Top="0" Stretch="Fill" Fill="#00C80000" Data="F1 M 2,0L 13.4166,0C 14.5212,0 15.4166,0.895386 15.4166,2L 15.4166,13.5C 15.4166,14.6046 14.5212,15.5 13.4166,15.5L 2,15.5C 0.895386,15.5 0,14.6046 0,13.5L 0,2C 0,0.895386 0.895386,0 2,0 Z "/>
									<Path x:Name="Path" Width="15" Height="3.29211" Canvas.Left="0.203247" Canvas.Top="12.0621" Stretch="Fill" Fill="#FF000000" Data="F1 M 1.84924,12.0621L 13.5572,12.0621C 14.4663,12.0621 15.2032,12.7991 15.2032,13.7082L 15.2032,13.7082C 15.2032,14.6173 14.4663,15.3542 13.5572,15.3542L 1.84924,15.3542C 0.940186,15.3542 0.203247,14.6173 0.203247,13.7082L 0.203247,13.7082C 0.203247,12.7991 0.940186,12.0621 1.84924,12.0621 Z "/>
									<Path x:Name="Path_0" Width="13.6262" Height="2.20911" Canvas.Left="0.890076" Canvas.Top="12.6036" Stretch="Fill" Fill="#FFCBCBCB" Data="F1 M 1.99463,12.6036L 13.4117,12.6036C 14.0218,12.6036 14.5162,13.0981 14.5162,13.7082L 14.5162,13.7082C 14.5162,14.3182 14.0218,14.8127 13.4117,14.8127L 1.99463,14.8127C 1.38458,14.8127 0.890076,14.3182 0.890076,13.7082L 0.890076,13.7082C 0.890076,13.0981 1.38458,12.6036 1.99463,12.6036 Z "/>
								</Canvas>
							</Viewbox>
						</Grid>
						<ControlTemplate.Triggers>
							<Trigger Property="IsMouseOver" Value="True">
								<Setter Property="Fill" TargetName="Path_0" Value="#FF67C8FF"/>
							</Trigger>
							<Trigger Property="IsDefaulted" Value="True"/>
							<Trigger Property="IsMouseOver" Value="True"/>
							<Trigger Property="IsPressed" Value="True"/>
							<Trigger Property="IsEnabled" Value="False"/>
						</ControlTemplate.Triggers>
					</ControlTemplate>
				</Setter.Value>
			</Setter>
		</Style>
		<ControlTemplate x:Key="SendButtonControlTemplate" TargetType="{x:Type Button}">
			<Grid x:Name="grid">
				<Rectangle x:Name="BgrndRct" Stroke="#FFECAC00" RadiusX="3.25" RadiusY="3.25" Fill="#CB2E2E2E"/>
				<Rectangle x:Name="GlowRct" RadiusX="2.5" RadiusY="2.5" Margin="1,1.125,1,1.167" Opacity="0">
					<Rectangle.Fill>
						<RadialGradientBrush Center="0.496,0.997" GradientOrigin="0.478,1.029" RadiusX="1.055" RadiusY="1.055">
							<GradientStop Color="#B8C91616" Offset="0"/>
							<GradientStop Color="#00A90D0D" Offset="0.901"/>
						</RadialGradientBrush>
					</Rectangle.Fill>
				</Rectangle>
				<Rectangle x:Name="ShineRct" RadiusX="2.5" RadiusY="2.5" Margin="1,1.125,1,11.667">
					<Rectangle.Fill>
						<LinearGradientBrush MappingMode="RelativeToBoundingBox" EndPoint="0.5,1" StartPoint="0.5,0">
							<GradientStop Color="#87FFFFFF" Offset="0"/>
							<GradientStop Color="#10FFFFFF" Offset="1"/>
						</LinearGradientBrush>
					</Rectangle.Fill>
				</Rectangle>
				<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Opacity" TargetName="GlowRct" Value="1"/>
					<Setter Property="Opacity" TargetName="ShineRct" Value="0.8"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="ShowButtonControlTemplate" TargetType="{x:Type Button}">
			<Grid>
				<Rectangle x:Name="BgrndRct" Stroke="#FF131A1C" RadiusX="3.25" RadiusY="3.25" Fill="#D91A1A1A"/>
				<Rectangle x:Name="GlowRct" RadiusX="2.5" RadiusY="2.5" Margin="1,1.125,1,1.141" Opacity="0">
					<Rectangle.Fill>
						<RadialGradientBrush Center="0.496,0.997" GradientOrigin="0.478,1.029" RadiusX="1.055" RadiusY="1.055">
							<GradientStop Color="#B81688C9" Offset="0"/>
							<GradientStop Color="#000D78A9" Offset="0.901"/>
						</RadialGradientBrush>
					</Rectangle.Fill>
				</Rectangle>
				<Rectangle x:Name="ShineRct" RadiusX="2.5" RadiusY="2.5" Margin="1.25,1.25,1.25,12.849" VerticalAlignment="Stretch">
					<Rectangle.Fill>
						<LinearGradientBrush MappingMode="RelativeToBoundingBox" EndPoint="0.5,1" StartPoint="0.5,0">
							<GradientStop Color="#87FFFFFF" Offset="0"/>
							<GradientStop Color="#10FFFFFF" Offset="1"/>
						</LinearGradientBrush>
					</Rectangle.Fill>
				</Rectangle>
				<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,0"/>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Fill" TargetName="BgrndRct" Value="#F32E2E2E"/>
					<Setter Property="Opacity" TargetName="GlowRct" Value="1"/>
					<Setter Property="Opacity" TargetName="ShineRct" Value="0.875"/>
					<Setter Property="Stroke" TargetName="BgrndRct" Value="#FF313131"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="ZoomInButtonCtrlTemplate" TargetType="{x:Type Button}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="3.5" RadiusY="3.5" x:Name="ZoomInBgrndRct"/>
				<Path Fill="#F1FFFFFF" Stretch="Fill" Stroke="{x:Null}" StrokeThickness="0.5" Margin="5.83,6.083,5.83,6.083" RenderTransformOrigin="0.500000003172494,0.500000010877122" Data="M7.5809999,0 L9.2529998,0 C9.747295,0 10.148,0.40070518 10.148,0.89499998 L10.148,6.6859999 15.939,6.6859999 C16.433293,6.6859999 16.834,7.0867053 16.834,7.5809999 L16.834,9.2530003 C16.834,9.7472935 16.433293,10.148 15.939,10.148 L10.148,10.148 10.148,15.939 C10.148,16.433297 9.7472936,16.834 9.2529998,16.834 L7.5809999,16.834 C7.0867063,16.834 6.6859998,16.433297 6.6859999,15.939 L6.6859999,10.148 0.89499998,10.148 C0.40070413,10.148 0,9.7472927 0,9.2530003 L0,7.5809999 C0,7.086706 0.4007045,6.6859999 0.89499998,6.6859999 L6.6859999,6.6859999 6.6859999,0.89499998 C6.6859998,0.4007051 7.086705,0 7.5809999,0 z" x:Name="Cross">
					<Path.RenderTransform>
						<TransformGroup>
							<ScaleTransform ScaleX="1" ScaleY="1"/>
							<SkewTransform AngleX="0" AngleY="0"/>
							<RotateTransform Angle="90"/>
							<TranslateTransform X="0" Y="0"/>
						</TransformGroup>
					</Path.RenderTransform>
				</Path>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Fill" TargetName="Cross" Value="#F14FB9E0"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="ZoomOutButtonCtrlTemplate" TargetType="{x:Type Button}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="3.5" RadiusY="3.5" x:Name="ZoomInBgrndRct"/>
				<Rectangle Fill="#F2FFFFFF" Stroke="{x:Null}" RadiusX="0.648" RadiusY="0.648" HorizontalAlignment="Stretch" Margin="10.929,6.4,10.654,6.684" VerticalAlignment="Stretch" RenderTransformOrigin="0.5,0.5" StrokeThickness="0.5" Opacity="1" x:Name="MinusRct" d:LayoutOverrides="HorizontalAlignment">
					<Rectangle.RenderTransform>
						<TransformGroup>
							<ScaleTransform ScaleX="1" ScaleY="1"/>
							<SkewTransform AngleX="0" AngleY="0"/>
							<RotateTransform Angle="90"/>
							<TranslateTransform X="0" Y="0"/>
						</TransformGroup>
					</Rectangle.RenderTransform>
				</Rectangle>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Fill" TargetName="MinusRct" Value="#F14FB9E0"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="SaveButtonCtrlTemplate" TargetType="{x:Type Button}">
			<Grid>
				<Image x:Name="SaveImage" Stretch="Fill" Margin="1.019,1.209,1.018,0.833" Opacity="1"/>
			</Grid>
		</ControlTemplate>
		<ControlTemplate x:Key="SaveButtonControlTemplate" TargetType="{x:Type Button}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="2.5" RadiusY="2.5" x:Name="ZoomInBgrndRct"/>
				<Rectangle Fill="#E0FFFFFF" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="0.33" RadiusY="0.33" Margin="3.92,1.435,3.83,10.172" VerticalAlignment="Stretch" x:Name="LabelRct"/>
				<Rectangle Fill="#97000000" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="0.413" RadiusY="0.413" Margin="5.022,0,3.83,0.927" VerticalAlignment="Bottom" Height="6.626" x:Name="SlideRgnRct"/>
				<Path Fill="#F2F0F0F0" Stretch="Fill" Stroke="{x:Null}" StrokeThickness="0.5" Margin="5.398,0,6.87,0.926" VerticalAlignment="Bottom" Height="6.314" Data="M1.318,0.74899988 C1.1467917,0.74899994 1.008,0.88779168 1.008,1.0589999 L1.008,5.0040001 C1.008,5.175208 1.1467917,5.3140001 1.318,5.3140001 L3.346,5.3140001 C3.5172083,5.3140001 3.6559999,5.175208 3.6559999,5.0040001 L3.6559999,1.0589999 C3.6559999,0.88779168 3.5172083,0.74899994 3.346,0.74899988 z M0.31000003,2.8421709E-14 L12.089,2.8421709E-14 C12.260208,-7.465465E-08 12.399,0.13879165 12.399,0.30999984 L12.399,6.0040001 C12.399,6.175208 12.260208,6.3140001 12.089,6.3140001 L0.31000003,6.3140001 C0.13879173,6.3140001 0,6.175208 0,6.0040001 L0,0.30999984 C0,0.13879165 0.13879173,-7.465465E-08 0.31000003,2.8421709E-14 z" x:Name="MetalRct"/>
				<Rectangle Fill="#E0454545" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="0.33" RadiusY="0.33" Margin="4.791,3.979,4.543,0" VerticalAlignment="Top" Height="0.75"/>
				<Rectangle Fill="#E0454545" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="0.33" RadiusY="0.33" Margin="4.791,6.064,4.543,0" VerticalAlignment="Top" Height="0.75"/>
				<Rectangle Fill="#E0454545" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="0.33" RadiusY="0.33" Margin="4.791,8.149,4.543,0" VerticalAlignment="Top" Height="0.75"/>
				<Rectangle Fill="#E0454545" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="0.33" RadiusY="0.33" Margin="4.791,10.36,4.543,0" VerticalAlignment="Top" Height="0.75"/>
				<Rectangle Fill="#E0454545" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="0.33" RadiusY="0.33" Margin="4.791,0,4.543,11.744" VerticalAlignment="Bottom" Height="0.75"/>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Fill" TargetName="LabelRct" Value="#FFFFFFFF"/>
					<Setter Property="Fill" TargetName="MetalRct" Value="#FFF0F0F0"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="RoadmapButtonCtrlTemplate" TargetType="{x:Type ToggleButton}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="3.5" RadiusY="3.5" x:Name="ZoomInBgrndRct"/>
				<ContentControl HorizontalAlignment="Center" VerticalAlignment="Center" Content="Roadmap" Foreground="#EEE3E3E3" x:Name="contentControl" FontSize="11"/>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Foreground" TargetName="contentControl" Value="#FFFFFFFF"/>
				</Trigger>
				<Trigger Property="IsChecked" Value="True">
					<Setter Property="Foreground" TargetName="contentControl" Value="#F965BDFF"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="HybridToggleButtonCtrlTemplate" TargetType="{x:Type ToggleButton}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="3.5" RadiusY="3.5" x:Name="ZoomInBgrndRct"/>
				<ContentControl HorizontalAlignment="Center" x:Name="contentControl" VerticalAlignment="Center" Content="Hybrid" FontSize="11" Foreground="#EEE3E3E3"/>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Foreground" TargetName="contentControl" Value="#FFFFFFFF"/>
				</Trigger>
				<Trigger Property="IsChecked" Value="True">
					<Setter Property="Foreground" TargetName="contentControl" Value="#F965BDFF"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="TerrainToggleButtonCtrlTemplate" TargetType="{x:Type ToggleButton}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="3.5" RadiusY="3.5" x:Name="ZoomInBgrndRct"/>
				<ContentControl HorizontalAlignment="Center" x:Name="contentControl" VerticalAlignment="Center" Content="Terrain" FontSize="11" Foreground="#EEE3E3E3"/>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Foreground" TargetName="contentControl" Value="#FFFFFFFF"/>
				</Trigger>
				<Trigger Property="IsChecked" Value="True">
					<Setter Property="Foreground" TargetName="contentControl" Value="#F965BDFF"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="LeftButtonCtrlTemplate" TargetType="{x:Type Button}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="3.5" RadiusY="3.5" x:Name="LeftBgrndRct"/>
				<Path Fill="#F2FFFFFF" Stretch="Fill" Stroke="{x:Null}" StrokeThickness="0.5" HorizontalAlignment="Stretch" Margin="10.366,4.491,3.449,8.593" x:Name="LeftArrowPath" VerticalAlignment="Stretch" Opacity="1" RenderTransformOrigin="0.142092680229453,0.500000007691215" Data="M1.5419999,0 L1.8476233,0.12659333 2.3394138,0.19133873 10.080815,4.6608386 C10.818343,5.0866503 11.071036,6.0297222 10.645226,6.76725 10.219415,7.5047777 9.2763425,7.757473 8.5388145,7.3316612 L3.0840001,4.1823225 3.0840001,10.481 C3.0840001,11.332623 2.3936234,12.023 1.5419999,12.023 0.69037711,12.023 -8.6916135E-08,11.332623 7.1054274E-15,10.481 L7.1054274E-15,1.542 0.18982393,1.0837243 0.2330026,0.75574995 0.36885397,0.6515075 0.45164128,0.45164127 0.83775319,0.29170851 1.1693147,0.037292377 1.3837976,0.065529556 z">
					<Path.RenderTransform>
						<TransformGroup>
							<ScaleTransform ScaleX="-1" ScaleY="1"/>
							<SkewTransform AngleX="0" AngleY="0"/>
							<RotateTransform Angle="-120"/>
							<TranslateTransform X="0" Y="0"/>
						</TransformGroup>
					</Path.RenderTransform>
				</Path>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Fill" TargetName="LeftArrowPath" Value="#F14FB9E0"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="RightButtonCtrlTemplate" TargetType="{x:Type Button}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="3.5" RadiusY="3.5" x:Name="RightBgrndRct"/>
				<Path Fill="#F2FFFFFF" Stretch="Fill" Stroke="{x:Null}" StrokeThickness="0.5" HorizontalAlignment="Stretch" Margin="11.201,4.491,2.614,8.593" x:Name="RightArrowPath" VerticalAlignment="Stretch" Opacity="1" RenderTransformOrigin="0.142092680229453,0.500000007691215" Data="M1.5419999,0 L1.8476233,0.12659333 2.3394138,0.19133873 10.080815,4.6608386 C10.818343,5.0866503 11.071036,6.0297222 10.645226,6.76725 10.219415,7.5047777 9.2763425,7.757473 8.5388145,7.3316612 L3.0840001,4.1823225 3.0840001,10.481 C3.0840001,11.332623 2.3936234,12.023 1.5419999,12.023 0.69037711,12.023 -8.6916135E-08,11.332623 7.1054274E-15,10.481 L7.1054274E-15,1.542 0.18982393,1.0837243 0.2330026,0.75574995 0.36885397,0.6515075 0.45164128,0.45164127 0.83775319,0.29170851 1.1693147,0.037292377 1.3837976,0.065529556 z">
					<Path.RenderTransform>
						<TransformGroup>
							<ScaleTransform ScaleX="1" ScaleY="1"/>
							<SkewTransform AngleX="0" AngleY="0"/>
							<RotateTransform Angle="120"/>
							<TranslateTransform X="0" Y="0"/>
						</TransformGroup>
					</Path.RenderTransform>
				</Path>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Fill" TargetName="RightArrowPath" Value="#F14FB9E0"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="UpButtonCtrlTemplate" TargetType="{x:Type Button}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="3.5" RadiusY="3.5" x:Name="UpBgrndRct"/>
				<Path Fill="#F2FFFFFF" Stretch="Fill" Stroke="{x:Null}" StrokeThickness="0.5" HorizontalAlignment="Right" Margin="0,6.241,0.574,6.843" x:Name="UpArrowPath" VerticalAlignment="Stretch" Opacity="1" RenderTransformOrigin="0.142092680229453,0.500000007691215" Data="M1.5419999,0 L1.8476233,0.12659333 2.3394138,0.19133873 10.080815,4.6608386 C10.818343,5.0866503 11.071036,6.0297222 10.645226,6.76725 10.219415,7.5047777 9.2763425,7.757473 8.5388145,7.3316612 L3.0840001,4.1823225 3.0840001,10.481 C3.0840001,11.332623 2.3936234,12.023 1.5419999,12.023 0.69037711,12.023 -8.6916135E-08,11.332623 7.1054274E-15,10.481 L7.1054274E-15,1.542 0.18982393,1.0837243 0.2330026,0.75574995 0.36885397,0.6515075 0.45164128,0.45164127 0.83775319,0.29170851 1.1693147,0.037292377 1.3837976,0.065529556 z" Width="10.852">
					<Path.RenderTransform>
						<TransformGroup>
							<ScaleTransform ScaleX="-1" ScaleY="1"/>
							<SkewTransform AngleX="0" AngleY="0"/>
							<RotateTransform Angle="-30"/>
							<TranslateTransform X="0" Y="0"/>
						</TransformGroup>
					</Path.RenderTransform>
				</Path>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Fill" TargetName="UpArrowPath" Value="#F14FB9E0"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
		<ControlTemplate x:Key="DownButtonCtrlTemplate" TargetType="{x:Type Button}">
			<Grid>
				<Rectangle Fill="#CB000000" Stroke="#F17693A1" RadiusX="3.5" RadiusY="3.5" x:Name="DownBgrndRct"/>
				<Path Fill="#F2FFFFFF" Stretch="Fill" Stroke="{x:Null}" StrokeThickness="0.5" HorizontalAlignment="Right" Margin="0,6.991,0.574,6.093" x:Name="DownArrowPath" VerticalAlignment="Stretch" Opacity="1" RenderTransformOrigin="0.142092680229453,0.500000007691215" Data="M1.5419999,0 L1.8476233,0.12659333 2.3394138,0.19133873 10.080815,4.6608386 C10.818343,5.0866503 11.071036,6.0297222 10.645226,6.76725 10.219415,7.5047777 9.2763425,7.757473 8.5388145,7.3316612 L3.0840001,4.1823225 3.0840001,10.481 C3.0840001,11.332623 2.3936234,12.023 1.5419999,12.023 0.69037711,12.023 -8.6916135E-08,11.332623 7.1054274E-15,10.481 L7.1054274E-15,1.542 0.18982393,1.0837243 0.2330026,0.75574995 0.36885397,0.6515075 0.45164128,0.45164127 0.83775319,0.29170851 1.1693147,0.037292377 1.3837976,0.065529556 z" Width="10.852">
					<Path.RenderTransform>
						<TransformGroup>
							<ScaleTransform ScaleX="-1" ScaleY="-1"/>
							<SkewTransform AngleX="0" AngleY="0"/>
							<RotateTransform Angle="30"/>
							<TranslateTransform X="0" Y="0"/>
						</TransformGroup>
					</Path.RenderTransform>
				</Path>
			</Grid>
			<ControlTemplate.Triggers>
				<Trigger Property="IsMouseOver" Value="True">
					<Setter Property="Fill" TargetName="DownArrowPath" Value="#F14FB9E0"/>
				</Trigger>
			</ControlTemplate.Triggers>
		</ControlTemplate>
	</Window.Resources>
    <Grid>
    	<Rectangle Stroke="#FF819DA3" x:Name="BgndRectangle" StrokeThickness="1" Fill="#FFFFFFFF" RadiusY="6.25" RadiusX="6.25"/>
    	<Grid VerticalAlignment="Top" Height="23" x:Name="TitleGrid">
    		<TextBlock HorizontalAlignment="Left" Margin="9.667,6.066,0,2.647" x:Name="TitleTxtBlck" Width="30" FontSize="12" FontWeight="Normal" Foreground="#EEAFA780" Text="WPF" TextWrapping="Wrap" FontFamily="Myriad Pro" Visibility="Visible"/>
    		<Button Style="{DynamicResource CloseButtonStyle}" Width="11.195" Content="Button" x:Name="CloseButton" Cursor="Hand" HorizontalAlignment="Right" Margin="0,5.583,9.468,4.647"/>
    		<Button Style="{DynamicResource MinimizeButtonStyle}" Width="12.402" Content="Button" x:Name="MinimizeButton" Cursor="Hand" HorizontalAlignment="Right" Margin="0,4.733,26.606,4.73"/>
    	</Grid>
    	<Grid Margin="17,24,17,110" Width="500" Height="400" x:Name="MapImageGrid" Background="{x:Null}">
    		<Rectangle Fill="#FFEAEAEA" Stroke="{x:Null}" x:Name="MIGBgndRct" StrokeThickness="0.6"/>
    		<Image x:Name="MapImage"/>
    		<Rectangle Fill="{x:Null}" Stroke="#FF000000" x:Name="ImageRct" StrokeThickness="0.6"/>
    		<ProgressBar Margin="179,189,179,189" IsIndeterminate="True" x:Name="MapProgressBar" Visibility="Hidden"/>
    		<Button HorizontalAlignment="Left" Margin="7.667,71.359,0,0" VerticalAlignment="Top" Width="24.667" Height="25.107" Content="" Template="{DynamicResource ZoomInButtonCtrlTemplate}" Cursor="Hand" x:Name="ZoomInButton" IsEnabled="False"/>
    		<Button Cursor="Hand" HorizontalAlignment="Left" Margin="7.667,38.696,0,0" x:Name="ZoomOutButton" VerticalAlignment="Top" Width="24.667" Height="25.107" Content="" Template="{DynamicResource ZoomOutButtonCtrlTemplate}" IsEnabled="False"/>
    		<Button Cursor="Hand" HorizontalAlignment="Left" Margin="7.667,7,0,0" x:Name="SaveButton" VerticalAlignment="Top" Width="24.667" Height="25.107" Content="" Template="{DynamicResource SaveButtonControlTemplate}" ToolTip="Save map" IsEnabled="False"/>
    		<ToggleButton Margin="0,5,86,0" VerticalAlignment="Top" Height="23" Content="Roadmap" Width="78" HorizontalAlignment="Right" Template="{DynamicResource RoadmapButtonCtrlTemplate}" IsChecked="False" Cursor="Hand" x:Name="RoadmapToggleButton" IsEnabled="False"/>
    		<ToggleButton Margin="0,5,6,0" VerticalAlignment="Top" Height="23" Content="" Width="78" HorizontalAlignment="Right" Template="{DynamicResource TerrainToggleButtonCtrlTemplate}" x:Name="TerrainToggleButton" Cursor="Hand" IsEnabled="False"/>
    		<Viewbox HorizontalAlignment="Right" Margin="0,0,9.999,12.717" VerticalAlignment="Bottom" Width="66.001" Height="43.636" Stretch="Fill" x:Name="MoveBtnsVwBox">
    			<Grid Width="82.001" Height="54.2139999999999">
    				<Button Height="25.107" Content="" Template="{DynamicResource UpButtonCtrlTemplate}" x:Name="MoveUpButton" IsEnabled="True" Margin="28.667,0,28.667,0" VerticalAlignment="Top"/>
    				<Button x:Name="MoveDownButton" Height="25.107" Content="" Template="{DynamicResource DownButtonCtrlTemplate}" IsEnabled="True" Margin="28.667,0,28.667,0" VerticalAlignment="Bottom"/>
    				<Button x:Name="MoveLeftButton" Width="24.667" Content="" Template="{DynamicResource LeftButtonCtrlTemplate}" IsEnabled="True" HorizontalAlignment="Left" Margin="0,14.337,0,14.77"/>
    				<Button x:Name="MoveRightButton" Width="24.667" Content="" Template="{DynamicResource RightButtonCtrlTemplate}" IsEnabled="True" HorizontalAlignment="Right" Margin="0,14.337,0,14.77"/>
    			</Grid>
    		</Viewbox>
    	</Grid>
    	<TextBlock Margin="17,0,17,83" VerticalAlignment="Bottom" Height="21" Text="XXXXXXXXX, XXXX, XXXXX" TextWrapping="Wrap" FontSize="12" TextAlignment="Center" x:Name="AddressTxtBlck"/>
    	<Grid Margin="79,0,78.662,57" VerticalAlignment="Bottom" Height="23" x:Name="LatLngGrid">
    		<TextBlock HorizontalAlignment="Left" Margin="-1,2,0,0" x:Name="LatTxtBlck" Width="53" FontSize="12" Foreground="#FF7E0000" Text="Latitude:" TextWrapping="Wrap"/>
    		<TextBlock HorizontalAlignment="Left" Margin="51,2,0,0" x:Name="LatitudeTxtBlck" Width="82" FontSize="12" Foreground="#FF2871A5" Text="XXXXXXXXXX" TextWrapping="Wrap"/>
    		<TextBlock Margin="143,2,172.338,0" x:Name="LngTxtBlck" FontSize="12" Foreground="#FF7E0000" Text="Longitude:" TextWrapping="Wrap"/>
    		<TextBlock Margin="0,2,90.338,0" x:Name="LongitudeTxtBlck" FontSize="12" Foreground="#FF2871A5" Text="XXXXXXXXXX" TextWrapping="Wrap" HorizontalAlignment="Right" Width="82"/>
    		<Rectangle Stroke="{x:Null}" StrokeThickness="1" RadiusX="0.919" RadiusY="0.919" HorizontalAlignment="Left" Margin="132.768,0.333,0,4" x:Name="SeparatorTriangle" Width="2.124">
    			<Rectangle.Fill>
    				<LinearGradientBrush EndPoint="0.972,0.5" StartPoint="0.028,0.5">
    					<GradientStop Color="#FF7C7C7C" Offset="0"/>
    					<GradientStop Color="#FFA1A1A1" Offset="1"/>
    					<GradientStop Color="#FFB7B4B4" Offset="0.29"/>
    					<GradientStop Color="#FFC4C4C4" Offset="0.545"/>
    					<GradientStop Color="#FFB9B7B7" Offset="0.728"/>
    				</LinearGradientBrush>
    			</Rectangle.Fill>
    		</Rectangle>
    		<Grid HorizontalAlignment="Right" Margin="0,0,0,5" x:Name="ApproxPrecGrid" Width="82.336">
    			<Rectangle Fill="#FF001E2F" Stroke="#FF778C99" StrokeThickness="1" RadiusX="0" RadiusY="0" Margin="0,0,0.002,0"/>
    			<TextBlock Margin="0.003,1.165,0,0.835" x:Name="AccuracyTxtBlck" FontSize="11" Foreground="#FFFFFFFF" Text="XXXXXXX" TextWrapping="Wrap" TextAlignment="Center" FontFamily="Segoe UI"/>
    		</Grid>
    	</Grid>
    	<TextBox Margin="17,0,115,20" VerticalAlignment="Bottom" Height="26" Text="" TextWrapping="Wrap" FontSize="14" x:Name="AddressTxtBox" FontFamily="Segoe UI"/>
    	<Button HorizontalAlignment="Right" Margin="0,0,20,21" VerticalAlignment="Bottom" Width="84" Height="24" Content="Show" Template="{DynamicResource ShowButtonControlTemplate}" Foreground="#FFFFFFFF" FontFamily="Myriad Pro" FontSize="12" Cursor="Hand" x:Name="ShowMapButton" IsDefault="True"/>
        
    </Grid>
</Window>

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
Kenya Kenya
Experienced C# software developer with a passion for WPF.

Awards,
  • CodeProject MVP 2013
  • CodeProject MVP 2012
  • CodeProject MVP 2021

Comments and Discussions