Windows phone 8:如何将Object发送到Event?

Windows phone 8: How to send Object to an Event?

我正在开发一款叫车应用。我用了 Bing 地图

这是我的流程:

与另一个函数一起使用的变量。

这是我的代码 以及如何将对象从 Foreach 发送到 taxiIcon_Tap?

谢谢并致以最诚挚的问候!

    //------ BEGIN get near Driver ------//
    private async void GetNearDriver()
    {
        var uid = userData.content.uid;
        var lat = pickupLat;
        var lng = pickupLng;
        var clvl = taxiType;

        var input = string.Format("{{\"uid\":\"{0}\",\"lat\":{1},\"lng\":{2},\"cLvl\":\"{3}\"}}", uid, lat.ToString().Replace(',', '.'), lng.ToString().Replace(',', '.'), clvl);
        var output = await GetJsonFromPOSTMethod.GetJsonString(ConstantVariable.tNetRiderGetNerDriverAddress, input);
        var nearDriver = JsonConvert.DeserializeObject<RiderGetNearDriver>(output);
        if (nearDriver.content.listDriverDTO.Count > 0)
        {
            foreach (var taxi in nearDriver.content.listDriverDTO)
            {
                ShowNearDrivers(taxi.lat, taxi.lng, taxi.cName);
            }
        }
    }
    //------ END get near Driver ------//


    //------ BEGIN show and Design UI 3 taxi near current position ------//
    private void ShowNearDrivers(double lat, double lng, string tName)
    {            
        GeoCoordinate TaxiCoordinate = new GeoCoordinate(lat, lng);

        //Create taxi icon on map
        Image taxiIcon = new Image();
        taxiIcon.Source = new BitmapImage(new Uri("/Images/Taxis/img_CarIcon.png", UriKind.Relative));

        //Add a tapped event
        taxiIcon.Tap += taxiIcon_Tap;

        //Create Taxi Name 
        TextBlock taxiName = new TextBlock();
        taxiName.HorizontalAlignment = HorizontalAlignment.Center;
        taxiName.Text = tName;
        taxiName.FontSize = 12;
        taxiName.Foreground = new SolidColorBrush(Color.FromArgb(255, (byte)46, (byte)159, (byte)255)); //RBG color for #2e9fff

        //Create Stack Panel to group icon, taxi name, ...            
        Rectangle taxiNameBackground = new Rectangle();
        taxiNameBackground.Height = 18;
        taxiNameBackground.Width = taxiName.ToString().Length + 20;
        taxiNameBackground.RadiusX = 9;
        taxiNameBackground.RadiusY = 7;
        //taxiNameBackground.Stroke = new SolidColorBrush(Color.FromArgb(255, (byte)171, (byte)171, (byte)171)); //RBG color for #ababab
        taxiNameBackground.Fill = new SolidColorBrush(Color.FromArgb(255, (byte)213, (byte)235, (byte)255)); //RBG color for #d5ebff

        Grid taxiNameGrid = new Grid();
        taxiNameGrid.Margin = new Thickness(0, 4, 0, 4); //Margin Top and Bottom 4px
        taxiNameGrid.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
        taxiNameGrid.VerticalAlignment = System.Windows.VerticalAlignment.Center;
        taxiNameGrid.Children.Add(taxiNameBackground);
        taxiNameGrid.Children.Add(taxiName);

        StackPanel taxiStackPanel = new StackPanel();
        //taxiStackPanel.Margin  = new Thickness(5, 0, 5, 0);
        taxiStackPanel.Children.Add(taxiIcon);
        taxiStackPanel.Children.Add(taxiNameGrid);

        // Create a MapOverlay to contain the circle.
        MapOverlay myTaxiOvelay = new MapOverlay();
        //myTaxiOvelay.Content = myCircle;
        myTaxiOvelay.Content = taxiStackPanel;
        myTaxiOvelay.PositionOrigin = new Point(0.5, 0.5);
        myTaxiOvelay.GeoCoordinate = TaxiCoordinate;

        //Add to Map's Layer
        riderMapLayer = new MapLayer();
        riderMapLayer.Add(myTaxiOvelay);

        map_RiderMap.Layers.Add(riderMapLayer);
    }

    //Tapped event
    private void taxiIcon_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        //Hide Step 01
        this.grv_Step01.Visibility = Visibility.Collapsed;

        //Show Step 02
        this.grv_Step02.Visibility = Visibility.Visible;
        this.grv_Picker.Visibility = Visibility.Collapsed;
        //Step 2 info
        LoadStep2Info();
    }
    //------ END show and Design UI 3 taxi near current position ------//

您可以使用 Tag 属性 在使用不公开添加额外负载能力的事件时传递此类杂项对象。

我的理解是,在 taxiIcon_Tap 事件中,您希望能够访问与所点击内容相关的您自己的对象。
要执行此设置,您反对被点击的项目的 Tag 属性。

即如果你想传递坐标:

taxiIcon.Tag = TaxiCoordinate;

(你可以传递任何东西。)

然后,在点击的事件处理程序中,您可以通过从发送者强制转换以获取标签然后将其强制转换回您的类型来获取此对象。

var coords = ((FrameworkElement)sender).Tag as GeoCoordinate;