2016-03-29 35 views
2

1 Birden çok katmana pushpins ekleme ve ne severseniz ekleyin, bu katmanları temizleyin ve bazı öğelerin diğerlerinin önünde olduğundan emin olun. Windows 10 ile, bu kontrol gitti ve gerçekten ihtiyacım olan şeylerin yarısı ile bir kontrol tarafından değiştirildi, ancak 3D ve sahneler ile (kullanmadığım şeyler)Windows 10'daki XAML denetimleri için Z-Dizini ekleme MapControl

İlk denemem, tamam, MapPolygon ZIndex'e sahip o MapElement devralır ve

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

Büyük uygulayan çünkü harita kontrolü her elemanını nasıl çizileceğini bilmesi için, benim UserControl o uygulamaya olanak tanır. SÜRPRİZ! Bu arayüz dahili, hiçbir şey yapamazsın ama ona bak.

İkinci attampet, belki onlar unsurları çizmek için bir tuval kullanın ve Tuval bir zIndex vardır, iyi hadi, gereksiz O değildi çalışmak demek

pin.SetValue(Canvas.ZIndexProperty);

herkes lütfen bana UWP MapControl'de katmanlar gibi bir şey varsa ya da MapControl'ü öğelerin hangi dizinin çizileceğini anlamanın bir yolu var mı?

Saygılarımızla.

+0

bunu çözdü mü? –

+0

Nope I didn´t. Bir şekilde sipariş verdikten sonra eleman eklemek gibi hile yapmak zorundasınız. – toroveneno

cevap

0

Bunu açıklayıcı bir şekilde yapamaz mısınız? Aşağıdaki XAML düşünün:

<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> 

İşte, temelde düzenli XAML özelliklerini kullanarak doğrudan haritanın konuma görüntüleri (mapelements) bağlayıcı ediyorum. Üstte ne olup bittiğini, neyin altından geçtiğini kontrol etmek için ızgara katmanları, yığın kümeleri ve neyin niçin kullanıldığını kullanın. Ayrıca, bunu codebehind yoluyla da yapabilirsiniz.

+0

Şimdi bir kontrol panosunu denetimlere uygulayabildiğimi biliyorum ama istediğim şey 50 elemanım varsa ve 25. öğeye tıklarsam ZIndex özelliğini kolayca değiştirerek ön tarafa getir. – toroveneno

1

Sorununuzu çözüp çözmediğinden emin değilim ama kesinlikle sorunumu çözdü ve diğer insanlar için de yararlı olabilir.

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 

} 

Namespaces

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

Kontrol

<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> 
+0

Aynı sorunu yaşadım ve cevabınızı izleyerek ancak birkaç değişiklik yaparak çözdüm. Benim durumumda 'YourTemplate' bir 'StackPanel' idi, yani yukarıdaki kodun çalışması için ContentControl us = d'yi ContentControl olarak kaldırmam gerekti, çünkü her zaman onu null'a çevirdi. Yani dış ifadeyi kaldırdım ve her şey beklendiği gibi çalıştı. Teşekkür ederim. – Cosmin