5

Windows Phone 8 のマップ サービスを使用するアプリを開発しています。

リンク http://themightyhedgehog.blogspot.de/2013/01/how-to-use-google-maps-in-your-own.htmlをたどり、 Google マップを含むアプリの開発を試みました。

しかし、オンラインのXamlでエラーが発生しました MapAppScope:BindingHelpers.TileSource="{Binding GoogleMap}"

私が得たエラーは次のとおりです。

  1. BuildingHelpers は Silverlight ではサポートされていません。
  2. 添付可能なプロパティ 'TileSource' がタイプ 'BuildingHelpers' に見つかりませんでした。
  3. 名前空間プレフィックス「MapAppScope」が定義されていません。

Xaml の場合:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <Microsoft_Phone_Controls_Maps:Map 
Name="MyMap" 
Grid.Column="1" 
LogoVisibility="Collapsed" 
d:LayoutOverrides="GridBox" 
           MapAppScope:BindingHelpers.TileSource="{Binding GoogleMap}"
            Margin="0,0,0,2">
            <Microsoft_Phone_Controls_Maps:Map.Mode>
                <MSPCMCore:MercatorMode/>
            </Microsoft_Phone_Controls_Maps:Map.Mode>
        </Microsoft_Phone_Controls_Maps:Map>


    </Grid>

.CS の場合:

    namespace Google_Map_App
{
    public enum GoogleType
    {
        Street = 'm',
        Hybrid = 'y',
        Satellite = 's',
        Physical = 't',
        PhysicalHybrid = 'p',
        StreetOverlay = 'h',
        WaterOverlay = 'r'
    }

    public class Google : TileSource
    {
        public Google()
        {
            MapType = GoogleType.Street;
            UriFormat = @"http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}";
        }

        public GoogleType MapType { get; set; }

        public override Uri GetUri(int x, int y, int zoomLevel)
        {
            return new Uri(
              string.Format(UriFormat, (x % 2) + (2 * (y % 2)),
              (char)MapType, zoomLevel, x, y));
        }
    }
    public static class BindingHelpers
    {
        //Used for binding a single TileSource object to a Bing Maps control
        #region TileSourceProperty

        // Name, Property type, type of object that hosts the property, method to call when anything changes
        public static readonly DependencyProperty TileSourceProperty =
            DependencyProperty.RegisterAttached("TileSource", typeof(TileSource),
            typeof(BindingHelpers), new PropertyMetadata(SetTileSourceCallback));

        // Called when TileSource is retrieved
        public static TileSource GetTileSource(DependencyObject obj)
        {
            return obj.GetValue(TileSourceProperty) as TileSource;
        }

        // Called when TileSource is set
        public static void SetTileSource(DependencyObject obj, TileSource value)
        {
            obj.SetValue(TileSourceProperty, value);
        }

        //Called when TileSource is set
        private static void SetTileSourceCallback(object sender, DependencyPropertyChangedEventArgs args)
        {

            var map = sender as Map;
            var newSource = args.NewValue as TileSource;
            if (newSource == null || map == null) return;

            // Remove existing layer(s)
            for (var i = map.Children.Count - 1; i >= 0; i--)
            {
                var tileLayer = map.Children[i] as MapTileLayer;
                if (tileLayer != null)
                {
                    map.Children.RemoveAt(i);
                }
            }

            var newLayer = new MapTileLayer();
            newLayer.TileSources.Add(newSource);
            map.Children.Add(newLayer);
        }

        #endregion
    }
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            // Sample code to localize the ApplicationBar
            //BuildLocalizedApplicationBar();
        }


    }
}
4

1 に答える 1