如何在Windows 10 MapControl中将Z-Index添加到XAML控件

时间:2016-03-29 19:19:52

标签: c# xaml win-universal-app bing-maps uwp-maps

1很容易将图钉和任何你喜欢的东西添加到多个图层中,清除这些图层,你可以确保某些项目在别人面前。在Windows 10中,该控件已经消失,并被一个控件所取代,其中包含我真正需要的一半但是,3D和场景(我不使用的东西)

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

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

很好,让我在UserControl中实现,所以map控件知道如何绘制每个元素。惊喜!那个界面是内部的,除了盯着它,你什么也做不了。

第二个问题,也许他们使用画布来绘制元素,Canvas有一个ZIndex,让我们好吧,不用说它不起作用

pin.SetValue(Canvas.ZIndexProperty);

任何人都可以告诉我UWP MapControl中是否有类似图层的内容,或者是否有办法告诉MapControl在哪个索引中绘制项目?

问候。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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功能将图像(mapelements)直接绑定到地图的位置。使用网格图层,堆栈面板和诸如此类的东西来控制最重要的内容,以及其他内容。您还可以通过代码隐藏来构建它。