Draw on bing maps? - windows-phone-7

How can I draw on bing maps? Or actually I'd like to add a marker. I have detected coordinates and now I want to display this place on a map with a marker...

To draw lines on a map you use the MapPolyline element as a child of the Map control. To add a marker to the Map control, you add a Pushpin element as a child of the Map control. To add multiple items (lines or pushpins) you add a MapItemsControl as a child of the Map control and specify the ItemsSource and ItemTemplate.
The following code example shows a PushPin to display the current location, and a MapItemsControl to show waypoints on a route:
<maps:Map x:Name="_map"
CopyrightVisibility="Collapsed"
CredentialsProvider="Your API Key Here"
LogoVisibility="Collapsed">
<maps:MapItemsControl ItemsSource="{Binding WayPoints}">
<maps:MapItemsControl.ItemTemplate>
<DataTemplate>
<maps:Pushpin Background="{Binding BackgroundBrush}" Location="{Binding Location}"/>
</DataTemplate>
</maps:MapItemsControl.ItemTemplate>
</maps:MapItemsControl>
<maps:Pushpin x:Name="_current" Background="Blue" Location="{Binding CurrentLocation}"/>
</maps:Map>
This blog post may also help you get started.

Related

Side scrolling menu with gesture removable items

I am trying to create a menu (currently a ListBox containing Images) for an app (WP8 specifically, but general principal will be the same for other environments) with the behavior determined by the initial part of each gesture:
dragging/swiping the menu left or right will cause the menu to scroll left or right
dragging an item up from the menu (which is at bottom of screen) will allow it to be detached (or recreated) and placed in another container.
Roughly speaking, I understand how to drag-and-drop the element, and to make a side-scrolling menu, but I am having difficulties in putting the two together and determining whether to be in "menu scroll" mode, or "drag and drop" mode, and how to switch between the two programmatically.
<ListBox Height="100"
ItemsSource="{Binding}"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
Grid.Row="1"
Name="MainMenuPicker">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal">
</StackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Path=Source}" Tap="Image_Tap"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Currently, horizontal scrolling is taken care of by ScrollViewer.HorizontalScrollBarVisibility="Auto"
I attempted to have a ManipluationStarted, ManipulationDelta etc to determine direction of gesture, but didn't get very far. I currently have a Tap event handler on the Image that moves moving to another parent container.
Questions:
1. How can I determine if a gesture is a side-to-side movement on the menu (ListBox) as a whole, or a drag (upwards) of an Image within the ListBox?
How can I programmatically set each case so that the functionality behaves as described?
Thanks in advance!
In this case you need to use Flick events,and use HorizaltalVelocity and vertcalvelocity to detect and distinguish between left-right and top-down swipes.
check this sample for better understanding

Assign geo coordinates to a pushpin

Guys i really need your help, i have a map
xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"
xmlns:maptk="clr-namespace:Microsoft.Phone.Maps.Toolkitassembly=Microsoft.Phone.Controls.Toolkit"
<maps:Map Grid.Row="0" Tap="Onm_MapControlTap" Name="m_MapControl
<maptk:MapExtensions.Children>
<maptk:Pushpin x:Name="m_PushPin" Tap="OnPushPinTap">
<maptk:Pushpin.Content>
<StackPanel>
<TextBlock Text=""/>
<Image Source=""/>
</StackPanel>
</maptk:Pushpin.Content>
</maptk:Pushpin>
</maptk:MapExtensions.Children>
</maps:Map>
when i have coordinates from the geowatcher, or when i tap on the map, i wanna add those coordinates to my pushpin.
m_PushPin.GeoCoordinate = m_watcher.Position.Location;
An exception of type 'System.NullReferenceException' occurred for m_PushPin, i cannot understand why this PushPin is null. Can you tell me what i'm doing wrong, and how can i fix this?
This is a known issue with the XAML Parser. Since your PushPin is nested in an Attached Dependency Property (MapExtensions.Children) it won't be part of the same logical tree as the UserControl and as such won't get picked up by FindName in that scope.
Instead, you should manually traverse the visual tree and get the control you need. Luckily, the map control ships with helper methods just for this occasion.
var pushpin = MapExtensions.GetChildren(myMap).OfType<Pushpin>().First(p => p.Name == "m_PushPin");
As an alternative you could use binding to bind some GeoCoordinate to your pushpin.

Adding UI elements to scrolviewer dynamically, win phone

I know how to add children to panels. It is like this
stackpanel.children.add(uielement);
But I have a scrollviewer inside stackpanel.
I wanted to add textblocks and other elements inside the scrollviewer but there is no function to add children to scrollviewer.
I tried to add another stackpanel inside the scrollview and add elements to it... but if I add elements dynamically to the stackpanel defined inside scrollviewer the elements show right but there is no scroll. If I do the same that is:
<ScrollViewer>
<StackPanel x:Name="StckPanel">
<TextBlock Text="etc" />
</StackPanel>
</ScrollViewer>
Doing this enabled the scroll. But If I add elements to the stack panel using
StckPanel.Children.Add(Textblock Object);
It does add the elements but the scroll is now disabled.
Here is what I did:
The XAML code is
<ScrollViewer>
<StackPanel x:Name="Hello"></StackPanel>
</ScrollViewer>
In my c# file I did this:
TextBlock x= new TextBlock();
x.Text="Here it goes";
StckPanel.Children.Add(x);
But when I do this the scroll is disabled. I am not able to scroll.
So I need to know why is the scroll not working here. And how am I supposed to add child elements inside ScrollViewer.
As in XAML we can add UIElements inside the tags of ScrollViewer. Why cant we do the same using c#.
Well I found the problem. I was not specifying the height width and margins properly. As a result this messed up the scroll somehow.

Bing map rotation in windows phone pivot

I have a trouble when try to rotate MapBase. As far as I didn't find a way to rotate content inside map(i mean tiles). I made a rotation transform with map itself and put it in square to emulate a rectangual viewport.
The problem is the map corner flows over corner of square while rotating and what worst it moves over pivot items titles and I don't know how to bring it to the bottom.
Is there any workaround of that? Or may be other way to rotate the map content?
UPDATE
XAML CODE
here is my code
<Grid x:Name="LayoutRoot" Background="Transparent">
<!--Pivot Control-->
<controls:Pivot Title="MY APPLICATION">
<!--Pivot item one-->
<controls:PivotItem Header="first">
<Grid d:LayoutOverrides="Height" Margin="-44,-30,44,30">
<Microsoft_Phone_Controls_Maps:Map Margin="-18,-72,2,76" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" d:LayoutRounding="Auto">
<Microsoft_Phone_Controls_Maps:Map.RenderTransform>
<CompositeTransform Rotation="36.01"/>
</Microsoft_Phone_Controls_Maps:Map.RenderTransform>
</Microsoft_Phone_Controls_Maps:Map>
<Rectangle Fill="#FFF4F4F5" Height="54" Margin="-14,-42,0,0" Stroke="Black" VerticalAlignment="Top"/>
</Grid>
</controls:PivotItem>
<!--Pivot item two-->
<controls:PivotItem Header="second">
</controls:PivotItem>
</controls:Pivot>
</Grid>
In the example is on the top of map, but map is on the top of Pivot headers and even application title is on the back of map corner...
And If you Load another page in "Paysage Orientation" when you rotate your phone ? (It's maybe a temporaly solution... ) but you want to reaload your map with good dimension.
It's not a good idea to use a Map Control inside a Pivot if gesture interaction is enabled.
Don’t use Slider, ToggleButton, or Map controls in a Pivot control. Don’t use controls that can pan or scroll inside a Pivot control. For example, if you put a Map control inside a Pivot control it might be difficult to use the Pivot control. The gesture input gets confused. The solution is to navigate to a subpage with controls that require gesture input. You can place a map in a pivot page as long as the map isn’t enabled for gesture interaction. You could overlay a button that would activate the map. Pressing the button would actually navigate to a separate page with just the Map control on it. The user could then press the Back button to go back to the Pivot control.
http://msdn.microsoft.com/en-us/library/windowsphone/design/hh202919%28v=vs.105%29.aspx

Using dataset and show on Bing map

I want to program an application based on wpf c# language.
I've got the bing map running and i want the dataset to display on the map with pushpin on top of the specific locations.
I don't know if you could make it work but i could do this whit this few lines of XAML code and Binding.
<bing:MapItemsControl ItemsSource="{Binding LocationsList}">
<bing:MapItemsControl.ItemTemplate>
<DataTemplate>
<bing:Pushpin Location="{Binding Location}" Content="{Binding Content}">
</bing:Pushpin>
</DataTemplate>
</bing:MapItemsControl.ItemTemplate>
</bing:MapItemsControl>

Resources