Вот простая панель навигации, которая содержит кнопки панорамирования и ползунок масштабирования:
<Grid HorizontalAlignment="Left" VerticalAlignment="Top" Height="290">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"/>
<ColumnDefinition Width="30"/>
<ColumnDefinition Width="30"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Content="⇑" Width="25" Height="25" Grid.Column="1" Tag="Up" Click="PanMap_Click"/>
<Button Content="⇒" Width="25" Height="25" Grid.Row="1" Grid.Column="2" Tag="Right" Click="PanMap_Click"/>
<Button Content="⇓" Width="25" Height="25" Grid.Row="2" Grid.Column="1" Tag="Down" Click="PanMap_Click"/>
<Button Content="⇐" Width="25" Height="25" Grid.Row="1" Tag="Left" Click="PanMap_Click"/>
<Slider Name="ZoomBar" Orientation="Vertical" Height="180" Width="20" Margin="10,10" Grid.ColumnSpan="3" Grid.Row="3"
HorizontalAlignment="Center" Minimum="1" Maximum="19" SmallChange="1"/>
</Grid>
Для панели масштабирования я будучи его центральной собственности карты, как это:
<m:Map Name="MyMap" ZoomLevel="{Binding Value, ElementName=ZoomBar, Mode=TwoWay}"/>
Вот код для панорамирования:
private void PanMap_Click(object sender, RoutedEventArgs e)
{
Button b = sender as Button;
Point p;
MyMap.TryLocationToViewportPoint(MyMap.Center, out p);
if (p != null)
{
switch (b.Tag as string)
{
case "Up":
p.Y -= 50;
break;
case "Down":
p.Y += 50;
break;
case "Left":
p.X -= 50;
break;
case "Right":
p.X += 50;
break;
}
Microsoft.Maps.MapControl.WPF.Location l;
MyMap.TryViewportPointToLocation(p, out l);
MyMap.SetView(l, MyMap.ZoomLevel);
}
}
Что вы имеете в виду под вопросом 2? Если вы добавите кнопку на карту, она должна оставаться на связи с указанной вами координатой, а не с центром карты, когда вы будете панорамировать, так как центр карты будет в другом месте. Вы просто хотите установить контроль над картой, которая не перемещается при панорамировании?
Я считаю, что есть свойство ZoomLevel, которое является просто «двойным», вы можете просто увеличить или уменьшить это значение при нажатии кнопки. –