3

1 将图钉和任何您喜欢的内容添加到多个图层非常容易,清除这些图层,您可以确保某些项目位于其他项目的前面。在 Windows 10 中,该控件消失了,取而代之的是一个具有我真正需要的一半但具有 3D 和场景(我不使用的东西)的控件

我的第一次尝试是,好的,MapPolygon 有 ZIndex,因为它继承自 MapElement 并实现

internal interface IMapElement
{
    System.Boolean Visible { get; set; }
    System.Int32 ZIndex { get; set; }
}

太好了,让我们在我的 UserControl 中实现它,这样地图控件就知道如何绘制每个元素。惊喜!该界面是内部的,您只能盯着它看。

第二次尝试,也许他们使用画布来绘制元素,而 Canvas 有一个 ZIndex,好吧,不用说它不起作用

pin.SetValue(Canvas.ZIndexProperty);

谁能告诉我 UWP MapControl 中是否有类似图层的东西,或者是否有办法告诉 MapControl 在哪个索引中绘制项目?

问候。

4

2 回答 2

2

我不确定它是否解决了您的问题,但肯定解决了我的问题,并且对其他人也可能有所帮助。

public class MapControl : DependencyObject
{

    #region Dependency properties

    public static readonly DependencyProperty ZIndexProperty = DependencyProperty.RegisterAttached("ZIndex", typeof(int), typeof(MapControl), new PropertyMetadata(0, OnZIndexChanged));

    #endregion


    #region Methods

    public static int GetZIndex(DependencyObject obj)
    {
        return (int)obj.GetValue(ZIndexProperty);
    }

    private static void OnZIndexChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ContentControl us = d as ContentControl;

        if (us != null)
        {
            // returns null if it is not loaded yet
            // returns 'DependencyObject' of type 'MapOverlayPresenter'
            var parent = VisualTreeHelper.GetParent(us);

            if (parent != null)
            {
                parent.SetValue(Canvas.ZIndexProperty, e.NewValue);
            }
        }
    }

    public static void SetZIndex(DependencyObject obj, int value)
    {
        obj.SetValue(ZIndexProperty, value);
    }

    #endregion

}

命名空间

xmlns:maps="using:Windows.UI.Xaml.Controls.Maps"
xmlns:mapHelper="using:yournamespace"

控制

<maps:MapControl>
    <maps:MapItemsControl ItemsSource="...">
        <maps:MapItemsControl.ItemTemplate>
            <DataTemplate x:DataType="...">
                <YourTemplate mapHelper:MapControl.ZIndex="{x:Bind ZIndex, Mode=OneWay}" />
            </DataTemplate>
        </maps:MapItemsControl.ItemTemplate>
    </maps:MapItemsControl>
</maps:MapControl>
于 2016-06-13T10:34:42.827 回答
0

您不能以声明方式执行此操作吗?考虑以下 XAML:

<maps:MapControl x:Name="myMap" HorizontalAlignment="Left">
  <maps:MapItemsControl x:Name="MapItems" ItemsSource="{Binding}">
    <maps:MapItemsControl.ItemTemplate>
      <DataTemplate>
        <Button x:Name="MapItemButton" Background="Transparent">
          <StackPanel>
            <Border Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
              <TextBlock Text="{Binding Title}"/>
            </Border>
            <Image Source="{Binding ImageSourceUri}" maps:MapControl.Location="{Binding Location}">
              <Image.Transitions>
                <TransitionCollection>
                  <EntranceThemeTransition/>
                </TransitionCollection>
              </Image.Transitions>
            </Image>
          </StackPanel>
        </Button>
      </DataTemplate>
    </maps:MapItemsControl.ItemTemplate>
  </maps:MapItemsControl>
</maps:MapControl>

在这里,我基本上是使用常规 XAML 功能将图像(地图元素)直接绑定到地图的位置。使用网格层、堆栈面板和诸如此类的东西来控制上面的内容,下面的内容等。当然,您也可以通过代码隐藏来构建它。

于 2016-03-30T04:49:46.840 回答