Detta är en serie korta noteringar som jag vill dela med mig efter att ha utvecklat Windows Phone appen TrafikTitt. Mer info om appen och ett index på noteringarna finns här.

I förra bloggposten beskrev jag hur man använder Bing Maps i sina egna appar i Windows Phone. För att göra kartan mer intressant kan man lägga på egna delar på denna karta, däribland kartnålar.

I TrafikTitt används kartnålar (Pushpins) för att registrera vart de olika kamerorna finns och också visa kamerabilden för en kamera genom att klicka på kartnålen.

En Pushpin är en klass som man instansierar och sedan lägger till den i kartobjektet. Det sker på följande sätt:

Pushpin pushPin = new Pushpin() { Content = camera.Name, Tag = camera };
pushPin.Background = new SolidColorBrush(Color.FromArgb(255, 245, 218, 0));
pushPin.Foreground = new SolidColorBrush(Colors.Black);

 

Här skapar vi en ny Pushpin med namnet pushPin. I konstruktorn sätter vi också egenskaperna Content och Tag. Content är innehållet som skall synas i kartnålen. (Observera att detta är på samma sätt som i en knapp, Content kan innehålla nästan vad som helst.) Egenskapen Tag, som kan innehålla vad som helst, innehåller mitt objekt för själva kameran, camera. (Mer om själva domänmodellen i TrafikTitt i ett annat inlägg.)

Sedan sätts färgerna för för- och bakgrunden.

Nästa steg är att placera denna Pushpin på kartan. Det görs i två steg: sätt koordinaterna och lägg till den i kartobjektet.

Man lägger till koordinaterna genom att först skapa ett objekt av typen Location och sätta dess egenskaper Latitude och Longitude och sedan lägga till detta objekt till vår Pushpin.

Location loc = new Location();
loc.Latitude = camera.Latitude;
loc.Longitude = camera.Longitude;
pushPin.Location = loc;

(På samma sätt här så använder jag mig av mitt domänobjekt camera för att lagra Latitude och Longitude. Dessa båda är definerade som Double.)

Man använder sig av egenskapen Children i kartobjektet mapTrafik för att lägga till denna pushPin.

mapTrafic.Children.Add(pushPin);

Visning av kamerabilden

Det sista som jag skall beskriva i det här blogginlägget är hur man hanterar själva visningen av kamerabilden. Det görs genom att man kopplar ett event till de kartnålar som vi lägger till på kartan.

pushPin.MouseLeftButtonDown += 
new MouseButtonEventHandler(pushPin_MouseLeftButtonDown);

Jag kopplar upp eventet MouseLeftButtonDown eftersom eventet Click inte finns. (LeftButtonDown är samma sak som att trycka med fingret kartnålen.) Jag använder mig av en generell hanterare av eventet med namnet pushPin_MouseLeftButtonDown.

void pushPin_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Pushpin pushPin = sender as Pushpin;
TraficCamera tc = pushPin.Tag as TraficCamera;
ShowCameraImage(tc);
}