Silverlight 4 和 Windows Phone 7 的 Bing 地图控件中的交互式图层

Posted

技术标签:

【中文标题】Silverlight 4 和 Windows Phone 7 的 Bing 地图控件中的交互式图层【英文标题】:Interactive layers in Bing map control for Silverlight 4 and Windows Phone 7 【发布时间】:2011-08-09 16:02:59 【问题描述】:

当使用 Bing 地图控件时,我的应用程序添加了一个叠加层,在该叠加层上将位置标记绘制为椭圆。每个椭圆都连接到一个抽头处理程序,该处理程序在 WP7 仿真器中按预期工作。遗憾的是,在 HTC 硬件上似乎并非如此——地图本身似乎获取了所有输入。有谁知道我该如何解决这个问题。更好的是,有交互式图层的工作示例吗?

谢谢++

【问题讨论】:

椭圆被填满了吗? 【参考方案1】:

如果您使用 Visual Studio 2010 中的默认模板创建新的 windows phone 7.1 silverlight 应用程序,则只需将以下内容复制到 MainPage.xaml 和 MainPage.cs 文件中。您还需要引用 System.Device 和 Microsoft.Phone.Controls.Maps Dll。这应该允许您单击省略号。我在两款不同的 WP7 手机上测试过,效果很好。

Xaml

<phone:PhoneApplicationPage 
    x:Class="SampleMapApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:maps="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily="StaticResource PhoneFontFamilyNormal"
    FontSize="StaticResource PhoneFontSizeNormal"
    Foreground="StaticResource PhoneForegroundBrush"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <phone:PhoneApplicationPage.Resources>
        <DataTemplate x:Name="EllipseTemplate">
            <maps:Pushpin Location="Binding" Tap="Pushpin_Tap">
                <maps:Pushpin.Template>
                    <ControlTemplate>
                        <Ellipse Width="15" Height="15" Stroke="White" StrokeThickness="2">
                            <Ellipse.RenderTransform>
                                <TranslateTransform X="-5" Y="5"/>
                            </Ellipse.RenderTransform>
                            <Ellipse.Fill>
                                <SolidColorBrush Color="DarkBlue" Opacity="0.8"/>
                            </Ellipse.Fill>
                        </Ellipse>
                    </ControlTemplate>
                </maps:Pushpin.Template>
            </maps:Pushpin>
        </DataTemplate>
    </phone:PhoneApplicationPage.Resources>

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="5">
            <TextBlock Text="Sample Map Application" Style="StaticResource PhoneTextNormalStyle"/>
        </StackPanel>

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="0">
            <maps:Map>
                <maps:MapLayer>
                    <maps:MapItemsControl ItemsSource="Binding Locations" ItemTemplate="StaticResource EllipseTemplate"/>
                </maps:MapLayer>
                <maps:Pushpin Location="Binding CurrentLocation, Mode=TwoWay" Content="Binding CurrentLocation, Mode=TwoWay"/>
            </maps:Map>
        </Grid>
    </Grid>

</phone:PhoneApplicationPage>

CS

using System.Collections.ObjectModel;
using System.Device.Location;
using System.Windows;
using System.Windows.Input;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Controls.Maps;

namespace SampleMapApp 
    public partial class MainPage : PhoneApplicationPage 
        // Constructor
        public MainPage() 
            InitializeComponent();
            Locations = new ObservableCollection<GeoCoordinate>() 
                new GeoCoordinate(-56, 73),
                new GeoCoordinate(-14, 120),
                new GeoCoordinate(48, -133),
                new GeoCoordinate(-2, 11),
                new GeoCoordinate(0, 40),
                new GeoCoordinate(-78, -85),
            ;
            CurrentLocation = Locations[0];
            DataContext = this;
        

        public ObservableCollection<GeoCoordinate> Locations  get; set; 

        #region CurrentLocation
        public GeoCoordinate CurrentLocation 
            get  return (GeoCoordinate) GetValue(CurrentLocationProperty); 
            set  SetValue(CurrentLocationProperty, value); 
        

        public static readonly DependencyProperty CurrentLocationProperty =
           DependencyProperty.Register("CurrentLocation", typeof(GeoCoordinate), typeof(MainPage), new PropertyMetadata(null));
        #endregion

        private void Pushpin_Tap(object sender, GestureEventArgs e) 
            CurrentLocation = (sender as Pushpin).Location;
        
    

【讨论】:

以上是关于Silverlight 4 和 Windows Phone 7 的 Bing 地图控件中的交互式图层的主要内容,如果未能解决你的问题,请参考以下文章

MSBuild命令行错误 - 未安装Silverlight 4 SDK

如何托管 Windows Workflow 4“工作流设计器”?是不是支持 Silverlight 或 Click 一次?

在 Silverlight 中使用表单进行 Windows 身份验证 [重复]

Windows 8 运行时(WinRT/Windows 应用商店应用程序/Windows 10 通用应用程序)与 Silverlight 和 WPF 相比如何? [关闭]

在 Windows Phone 和 Silverlight 中将 Image Feed 转换为 BitmapImage

在 Silverlight 中获取当前 Windows 用户名