In this step, you will add code to the MainPage.xaml.cs file.
- Right-click the MainPage.xaml page and select View Code from the list. The MainPage.xaml.cs should open.
- Import the following namespaces:
- C1.Xaml
- C1.Xaml.DX
- C1.Xaml.Maps
- Add the following code to the class declaration:
| C# |
Copy Code
|
C1VectorLayer vl;
Random rnd = new Random();
C1VectorPlacemark current = null;
Point offset = new Point();
|
- Add the following code to the InitializeComponent() method. This will change the map source, add a C1VectorLayer, and create random coordinates:
| C# |
Copy Code
|
maps.Source = new VirtualEarthHybridSource();
vl = new C1VectorLayer();
maps.Layers.Add(vl);
maps.RightTapped += maps_RightTapped;
for (int i = 0; i < 10; i++)
{
// create random coordinates
Point pt = new Point(-80 + rnd.Next(160), -80 + rnd.Next(160));
AddMark(pt);
}
}
|
- The code that follows should be inserted after the closing curly bracket for the InitializeComponent() method. This code will add a RightTapped event handler and an AddMark() method:
| C# |
Copy Code
|
void maps_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
AddMark(maps.ScreenToGeographic(e.GetPosition(maps)));
}
void AddMark(Point pt)
{
Color clr = Utils.GetRandomColor(128, 192);
C1VectorPlacemark mark = new C1VectorPlacemark()
{
GeoPoint = pt,
Label = new TextBlock()
{
RenderTransform = new TranslateTransform() { Y = -5 },
IsHitTestVisible = false,
Text = (vl.Children.Count + 1).ToString()
},
LabelPosition = LabelPosition.Top,
Geometry = Utils.CreateBaloon(),
Stroke = new SolidColorBrush(Colors.DarkGray),
Fill = new SolidColorBrush(clr),
};
mark.PointerPressed += mark_PointerPressed;
maps.PointerMoved += mark_PointerMoved;
mark.PointerReleased += mark_PointerReleased;
vl.Children.Add(mark);
mark.DoubleTapped += mark_DoubleTapped;
}
|
- The last section of code to add handles the Pointer events for the C1Maps control and the DoubleTapped event for the marks:
| C# |
Copy Code
|
void mark_PointerMoved(object sender, PointerRoutedEventArgs e)
{
if (current == null)
{
return;
}
var cur = e.GetCurrentPoint(maps).Position;
cur = new Point(cur.X - offset.X,
cur.Y - offset.Y);
current.GeoPoint = maps.ScreenToGeographic(cur);
e.Handled = true;
}
void mark_PointerPressed(object sender, PointerRoutedEventArgs e)
{
offset = e.GetCurrentPoint(sender as C1VectorPlacemark).Position;
current = sender as C1VectorPlacemark;
e.Handled = true;
}
void mark_PointerReleased(object sender, PointerRoutedEventArgs e)
{
current = null;
e.Handled = true;
}
void mark_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
e.Handled = true;
vl.Children.Remove((C1VectorPlacemark)sender);
}
}
}
|
In this step, you added code to handle the Tapped and other events. You also changed the map source and created random coordinates for the initial map markers.