Extension for MapControl c# UWP



我必须在MapControl上划线。我有XAML查看我的MapControl:

<Maps:MapControl x:Name="mapMain" 
                         MapServiceToken="{StaticResource MapServiceTokenString}" 
                         RenderTransformOrigin="0.5,0.5" 
                         Margin="0,0,0,0"
                         extentions:PolyLineMapControl.ItemsCollection="{Binding  mapViewModel.PointsOfNodes}">
            <Maps:MapItemsControl x:Name="ItemsChanged"
                    ItemsSource="{x:Bind mapViewModel.PointsOfNodes, Mode=OneWay}">
                <Maps:MapItemsControl.ItemTemplate>
                    <DataTemplate x:DataType="data:PointOfNode">
                        <StackPanel>
                            <Border Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
                                <TextBlock Text="{x:Bind DisplayName, Mode=OneWay}"/>
                            </Border>
                            <Image Source="{x:Bind ImageSourcePath, Mode=OneWay}"
                                    Maps:MapControl.Location="{x:Bind Location, Mode=OneWay}"
                                    Maps:MapControl.NormalizedAnchorPoint="{x:Bind NormalizedAnchorPoint, Mode=OneWay}">
                                <Image.Transitions>
                                    <TransitionCollection>
                                        <EntranceThemeTransition/>
                                    </TransitionCollection>
                                </Image.Transitions>
                            </Image>
                        </StackPanel>
                    </DataTemplate>
                </Maps:MapItemsControl.ItemTemplate>
            </Maps:MapItemsControl>
        </Maps:MapControl>

我成功地从mapViewModel中获得了分数,但扩展不起作用。

public class PolyLineMapControl
{
public static readonly DependencyProperty ItemsCollectionProperty = DependencyProperty.RegisterAttached("ItemsCollection", typeof(List<PointOfNode>), typeof(PolyLineMapControl), new PropertyMetadata(default(List<PointOfNode>), OnItemsChanged));
        public static List<PointOfNode> GetItemsCollection(DependencyObject obj)
        {
            return (List<PointOfNode>)obj.GetValue(ItemsCollectionProperty);
        }
        public static void SetItemsCollection(DependencyObject obj, List<PointOfNode> value)
        {
            obj.SetValue(ItemsCollectionProperty, value);
        }
        private static void OnItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
        //draw line
        }
}

属性初始化成功。当我在setter、getter、changer方法和属性中设置brakpoint时,我检测到了这一点。

1)创建TrackingMapControl:UserControl和DependencyProperty以收集

private static readonly DependencyProperty.Register(
            "PointsOfNodes",
            typeof(ObservableCollection<PointOfNode>),
            typeof(MapControl),
            new PropertyMetadata(new ObservableCollection<PointOfNode>()));
        public ObservableCollection<PointOfNode> PointsOfNodes
        {
            get { return (ObservableCollection<PointOfNode>)this.GetValue(PointsOfNodesProperty); }
            set { this.SetValue(PointsOfNodesProperty, value); }
        }

2) 在ChangeCollection上创建方法,其中在MapControl 的点之间绘制线

private void OnMapItemsPropertyChanged(DependencyObject sender, DependencyProperty dp)
{
var mapItemsControls = sender as MapItemsControl;
            var mapItemsSource = mapItemsControls?.ItemsSource as ObservableCollection<PointOfNode>;
            if (mapItemsSource != null)
            {
                this.MainMap.MapElements.Clear();
                if (mapItemsSource.Count > 1)
                {
                    for (var i = 0; i < mapItemsSource.Count - 1; i++)
                    {
                        this.LinePoints(mapItemsSource[i].Location, (mapItemsSource[i + 1]).Location);
                    }
                }
            }
}

3) 创建MapIconControl:UserControl,它将在TrackingMapControl中用作点的模板。

相关内容

  • 没有找到相关文章

最新更新