2016-03-29 4 views
2

1プッシュピンを追加するのは非常に簡単で、複数のレイヤーをクリアしてレイヤーをクリアすることができます。 Windows 10では、そのコントロールはなくなり、実際に必要なものの半分のコントロールで置き換えられましたが、3Dやシーン(使用しないもの)WindowsのMapControlにZ-Indexコントロールを追加する方法MapControl

私の最初の試みはOKでした.MapPolygonにはZIndexそれはMapElementから継承し、

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

グレート実装しているため、マップコントロールは、各要素を描画する方法を知っているので、私のユーザーコントロールのそれを実装することができます。驚き!そのインターフェースは内部的なものなので、何もすることはできません。 didn't仕事に

pin.SetValue(Canvas.ZIndexProperty);

それを言うまでもない

第二attampet、多分彼らは要素を描画するためにキャンバスを使用し、キャンバスのZIndexを持って、let'sウェルが、誰も教えてくださいすることができUWP MapControlにレイヤーのようなものがある場合、またはそのMapControlにアイテムを描画するインデックスがあることを伝える方法がある場合は、

よろしくお願いいたします。

+0

あなたはそれを解決しましたか? –

+0

いいえ、私はしませんでした。あなたは何らかの方法で注文した後に要素を追加するようなやり方をしなければなりません。 – toroveneno

答えて

0

これを宣言的に行うことはできませんか?

<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機能を使用してイメージ(マペッティメント)をマップの場所に直接バインドしています。グリッドレイヤー、スタックパネル、その他のものを使って、上に行くもの、下に行くものなどを制御します。もちろん、コードビハインドで構築することもできます。

+0

私は今コントロールにデータテンプレートを適用できますが、私が望むのは、50個の要素があり、25番目の要素をクリックすると、ZIndexプロパティを簡単に変更することです。 – toroveneno

1

私はあなたの問題を解決するかどうかは確かではありませんが、それは間違いなく私の問題を解決し、他の人にとっても役立つかもしれません。

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

私は同じ問題を抱えていましたが、あなたの答えに従って解決しましたが、いくつかの変更を加えて解決しました。私の場合、 'YourTemplate'は' StackPanel'でしたので、上記のコードを動作させるために、常にContentControl us = dをContentControlとして削除する必要がありました。なぜなら、常にnullにキャストしたからです。だから私は外側のifステートメントを削除し、すべてが期待通りに機能しました。ありがとうございました。 – Cosmin

関連する問題