首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapControl Template10

MapControl Template10
EN

Stack Overflow用户
提问于 2016-07-23 22:40:38
回答 2查看 489关注 0票数 1

解决了

我通过添加一个MapItemsControl.ItemTemplate来解决这个问题。如果没有此操作,它不会呈现除控件名称以外的任何内容。

因此,只需添加以下代码:

代码语言:javascript
复制
<Maps:MapItemsControl x:Name="mainMapItems" ItemsSource="{Binding MapItems}">
 <Maps:MapItemsControl.ItemTemplate>
  <DataTemplate>
   <StackPanel Background="Transparent">
    <TextBlock Maps:MapControl.Location="{Binding Location}" Text="{Binding Title}" Maps:MapControl.NormalizedAnchorPoint="0.5,0.5" FontSize="20" Margin="5"/>
   </StackPanel>
  </DataTemplate>
 </Maps:MapItemsControl.ItemTemplate>
</Maps:MapItemsControl>

这并不完美,因为这不会给你地图上的图标,而只是一个文本。但是,通过在集合中添加Image = "“可以很容易地解决这个问题。

我试图在MapControl布局中使用Template10。

我使用的代码是

MainPage.xaml

代码语言:javascript
复制
            <Maps:MapControl x:Name="MapControl1"
            ZoomInteractionMode="GestureAndControl"
            TiltInteractionMode="GestureAndControl"   
            MapServiceToken="<ApiCodeHere>"
            Loaded="{x:Bind ViewModel.Map_Loaded}"/>

MainPageViewModel.cs

代码语言:javascript
复制
    MapControl _Map;
    public MapControl Map { get { return _Map; } set { Set(ref _Map, value); RaisePropertyChanged(); } }

    public async void Map_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
    {

        MapControl newMap = new MapControl();

        Geoposition userLocation = await GetUserLocation();

        BasicGeoposition GeoPos_UserLocation = new BasicGeoposition() { Latitude = userLocation.Coordinate.Point.Position.Latitude, Longitude = userLocation.Coordinate.Point.Position.Longitude };
        BasicGeoposition GeoPos_NorthWest = new BasicGeoposition() { Latitude = userLocation.Coordinate.Point.Position.Latitude + 0.05, Longitude = userLocation.Coordinate.Point.Position.Latitude + 0.1 };
        BasicGeoposition GeoPos_SouthEast = new BasicGeoposition() { Latitude = userLocation.Coordinate.Point.Position.Latitude - 0.05, Longitude = userLocation.Coordinate.Point.Position.Latitude - 0.1 };

        GeoboundingBox mapBox = new GeoboundingBox(GeoPos_NorthWest, GeoPos_SouthEast);

        // Add Point for User
        MapIcon Icon_UserLocation = new MapIcon() { Location = new Geopoint(GeoPos_UserLocation) };
        newMap.MapElements.Add(Icon_UserLocation);
        newMap.Center = new Geopoint(mapBox.Center);

        Map = newMap;

        await Task.CompletedTask;
    }

Map_Loaded函数被激发为exepcted。我遇到的问题是,如果这是一个正常的项目,我将直接将数据设置为MapControl1.Center和MapControl1.MapElements.Add。但是,由于这是一个MVVM项目,这不是它是如何完成的,我对如何继续下去感到有点困惑。

我想做一些类似于Views.MainPage.MapControl1.Center = not ()的事情,但这显然是行不通的。

附加更新

事实证明,这就像我想的那样简单。这只是一个按正确顺序思考的问题。

MapControl有缩放和中心之类的控件。因此,对于MVVM代码来说,这是可行的。

代码语言:javascript
复制
Center="{Binding MapCenter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Zoom="{Binding MapZoom,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"

但是,我在设置MapItems时遇到了一些问题,正如我的资料来源所描述的那样。

要在地图上获得项目,您需要添加MapItemsControl,并且它应该像这样工作.

代码语言:javascript
复制
<Maps:MapItemsControl x:Name="mainMapItems" ItemsSource="{Binding MapItems,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></Maps:MapItemsControl>

但我在MainPageViewModel.xaml中的代码不适用于此。项目不更新。

代码语言:javascript
复制
IList<MapElement> _MapItems;
public IList<MapElement> MapItems { get { return _MapItems; } set { Set(ref _MapItems, value); RaisePropertyChanged(); } }

IList<MapElement> MapItems = new List<MapElement>() {
    new MapIcon() {
        Location = new Geopoint(GeoPos_UserLocation),
        Title = "You Are Here!"
    }
};

资料来源:Windows 10 SDK必应映射控件

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-24 15:59:12

我通过添加一个MapItemsControl.ItemTemplate来解决这个问题。如果没有此操作,它不会呈现除控件名称以外的任何内容。

因此,只需添加以下代码:

代码语言:javascript
复制
<Maps:MapItemsControl x:Name="mainMapItems" ItemsSource="{Binding MapItems}">
 <Maps:MapItemsControl.ItemTemplate>
  <DataTemplate>
   <StackPanel Background="Transparent">
    <TextBlock Maps:MapControl.Location="{Binding Location}" Text="{Binding Title}" Maps:MapControl.NormalizedAnchorPoint="0.5,0.5" FontSize="20" Margin="5"/>
   </StackPanel>
  </DataTemplate>
 </Maps:MapItemsControl.ItemTemplate>
</Maps:MapItemsControl>

这并不完美,因为这不会给你地图上的图标,而只是一个文本。但是,通过在集合中添加Image = "“可以很容易地解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2016-07-27 16:31:38

试着使用

ObservableCollection ObserverableCollection<MapElement> MapItems = new ObservableCollection<MapElement>();

由于您期望该项“在运行时可更新”或对幕后的更改作出反应,所以ObservableCollection实现了INPC。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38547023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档