Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在uiversal应用程序中触发单击事件以从地图获取坐标_C#_Bing Maps - Fatal编程技术网

C# 如何在uiversal应用程序中触发单击事件以从地图获取坐标

C# 如何在uiversal应用程序中触发单击事件以从地图获取坐标,c#,bing-maps,C#,Bing Maps,我试图在通用应用程序中执行一项看似简单的任务。 我希望能够点击我的地图,并让点击触发一个事件,这将给我的坐标 有许多指南演示了如何做到这一点,但我需要一个在我的通用应用程序(windows 8.1/WindowsPhone)中运行的解决方案 MSDN博客作者Ricky Brundritt写了我关于这个主题的好文章,我遵循了这个指南,以便创建一个可以在这两个项目中使用的地图 如果我理解正确,他会创建一个带有条件语句的文件,在项目之间共享。调用该方法时,将根据运行的项目使用适当的实现: E.x:

我试图在通用应用程序中执行一项看似简单的任务。 我希望能够点击我的地图,并让点击触发一个事件,这将给我的坐标

有许多指南演示了如何做到这一点,但我需要一个在我的通用应用程序(windows 8.1/WindowsPhone)中运行的解决方案

MSDN博客作者Ricky Brundritt写了我关于这个主题的好文章,我遵循了这个指南,以便创建一个可以在这两个项目中使用的地图

如果我理解正确,他会创建一个带有条件语句的文件,在项目之间共享。调用该方法时,将根据运行的项目使用适当的实现:

E.x:

现在,有没有一种方法可以实现在我点击地图时给我坐标的方法? 下面是一个类似问题的答案:()

但这对我来说不起作用,因为我无法进入

this.MyMap.PointerPressedOverride += MyMap_PointerPressedOverride;
我只有:

this.MyMap.PointerPressed += MyMap_PointerPressedOverride;
我也没有访问中的
TryPixelToLocation

 this.MyMap.TryPixelToLocation(e.GetCurrentPoint(this.MyMap).Position, out l);
总而言之,我在寻找一种方法,当我点击地图时触发一个事件,这两个项目都可以使用。谢谢你的帮助

谢谢大家!

编辑:

我在电话里遇到了一个奇怪的问题。当我按下地图时,该方法不会触发。在设备上调试时,您可以在屏幕侧面看到som编号。当我按下数字所在的位置时,该方法将激发,并在数字的“后面”添加一个。这真奇怪。不知何故,“数字”是可以点击的,但地图本身不是


有人遇到过类似的问题吗?

您可以在地图视图控件中创建一个事件处理程序,返回用户在地图上单击的位置的坐标。然后,您可以为不同的映射控件编写所需的代码,用于处理单击事件、获取映射坐标并将其传递给事件处理程序。下面是MapView控件的修改构造函数和一些附加代码,用于添加MapClicked事件,以及包装贴图控件并将贴图坐标传递给事件的代码

public MapView()
{           
    #if WINDOWS_APP
    _map = new Map();

    _shapeLayer = new MapShapeLayer();
    _map.ShapeLayers.Add(_shapeLayer);

    _pinLayer = new MapLayer();
    _map.Children.Add(_pinLayer);
    _map.PointerPressedOverride += _map_PointerPressedOverride;
    #elif WINDOWS_PHONE_APP
    _map = new MapControl();
    _map.PointerPressed += _map_PointerPressed;
    #endif

    this.Children.Add(_map);

    SetMapBindings();
}

public delegate void MapClickHandler(Geopoint center);

/// <summary>
/// A callback method used to when the map is Clicked
/// </summary>
public event MapClickHandler MapClicked;

#if WINDOWS_APP
private void _map_PointerPressedOverride(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
        Location l;
        _map.TryPixelToLocation(e.GetCurrentPoint(_map).Position, out l);
        Geopoint p = new Geopoint(new BasicGeoposition()
        {
            Latitude = l.Latitude,
            Longitude = l.Longitude
        });
        MapClicked(p);
}
#elif WINDOWS_PHONE_APP
private void _map_PointerPressed(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
        Geopoint p;
        _map.GetLocationFromOffset(e.GetCurrentPoint(_map).Position, out p);
        MapClicked(p);
}
#endif
公共地图视图()
{           
#如果WINDOWS\u应用程序
_map=新map();
_shapeLayer=新映射shapeLayer();
_map.shapeLayer.Add(_shapeLayer);
_pinLayer=新的映射层();
_map.Children.Add(_pinLayer);
_map.pointerpressedverride+=\u map\u pointerpressedverride;
#elif WINDOWS\u PHONE\u应用程序
_map=新的MapControl();
_map.PointerPressed+=\u map\u PointerPressed;
#恩迪夫
this.Children.Add(_map);
SetMapBindings();
}
公共代表无效MapClickHandler(地质点中心);
/// 
///一种回调方法,用于在单击地图时调用
/// 
公共事件MapClickHandler MapClicked;
#如果WINDOWS\u应用程序
私有void\u map\u pointerpressedverride(对象发送方,Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
地点l;
_锥虫定位图(e.GetCurrentPoint(_-map).Position,out l);
地质点p=新的地质点(新的基本地理位置()
{
纬度=l.纬度,
经度=l.经度
});
MAP(p);
}
#elif WINDOWS\u PHONE\u应用程序
私有void\u map\u pointer压缩(对象发送方,Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
地质点p;
_map.GetLocationFromOffset(例如GetCurrentPoint(_map).Position,out p);
MAP(p);
}
#恩迪夫

非常感谢您的帮助,也感谢您的博客和电子书。但有一个问题,当我在项目公共事件MapClickHandler MapClicked中单击地图时;总是空的。当我删除检查它是否为空的if语句时,我得到了坐标。看起来你有一个叫做SetMapBindings的方法,我没有这个方法,我在你的博客文章中找不到它。也许这与我的问题有关?SetMapdings方法可能来自不同的代码示例。我已经打开了一个类似的通用应用程序项目,并用它来测试这一点。我习惯于在回调时使用动作,您必须执行空检查。如果它在没有If语句的情况下工作,那么删除它们。是的,是上面的代码给出了错误。当我在手机上点击地图时,该方法不会被触发。它只会在我调试时点击手机上显示的“数字”时触发。它在我这方面非常有效。尝试清理解决方案并重建它。可能是使用旧代码或其他东西的缓存dll。你说得对!我试图在电话项目中使用相同的代码。必须使用另一个eventhandler。非常感谢。
 this.MyMap.TryPixelToLocation(e.GetCurrentPoint(this.MyMap).Position, out l);
#elif WINDOWS_PHONE_APP
private void _map_PointerPressed(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
        Geopoint p;
        _map.GetLocationFromOffset(e.GetCurrentPoint(_map).Position, out p);
        MapClicked(p);
}
#endif
public MapView()
{           
    #if WINDOWS_APP
    _map = new Map();

    _shapeLayer = new MapShapeLayer();
    _map.ShapeLayers.Add(_shapeLayer);

    _pinLayer = new MapLayer();
    _map.Children.Add(_pinLayer);
    _map.PointerPressedOverride += _map_PointerPressedOverride;
    #elif WINDOWS_PHONE_APP
    _map = new MapControl();
    _map.PointerPressed += _map_PointerPressed;
    #endif

    this.Children.Add(_map);

    SetMapBindings();
}

public delegate void MapClickHandler(Geopoint center);

/// <summary>
/// A callback method used to when the map is Clicked
/// </summary>
public event MapClickHandler MapClicked;

#if WINDOWS_APP
private void _map_PointerPressedOverride(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
        Location l;
        _map.TryPixelToLocation(e.GetCurrentPoint(_map).Position, out l);
        Geopoint p = new Geopoint(new BasicGeoposition()
        {
            Latitude = l.Latitude,
            Longitude = l.Longitude
        });
        MapClicked(p);
}
#elif WINDOWS_PHONE_APP
private void _map_PointerPressed(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
        Geopoint p;
        _map.GetLocationFromOffset(e.GetCurrentPoint(_map).Position, out p);
        MapClicked(p);
}
#endif