5

私は C# と XAML を使用して Windows 8 アプリに取り組んでいます。アプリには、カスタム画鋲を含むマップ ページがあります。次のコードを使用して、カスタム画鋲を追加しました。

    <Style x:Key="PushPinStyle" TargetType="bm:Pushpin">
        <Setter Property="Width" Value="25"/>
        <Setter Property="Height" Value="39"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Image Source="Assets/pushpin_icon.png" Stretch="Uniform" HorizontalAlignment="Left"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

    </Style>

上記のコードを有効にすると、ユーザーがマップを移動しない限り画鋲は表示されません。次のコードは、マップを生成するために使用されます。DataTemplate-

    <DataTemplate x:Key="pushpinSelector" >
        <bm:Pushpin Tapped="pushpinTapped" Style="{StaticResource PushPinStyle}">
            <bm:MapLayer.Position >
                <bm:Location Latitude="{Binding Latitude}" Longitude="{Binding Longitude}"/>
            </bm:MapLayer.Position>
        </bm:Pushpin>
    </DataTemplate>

マップ XAML-

            <bm:Map.Children>
                <bm:MapItemsControl Name="pushPinModelsLayer" 
                     ItemsSource="{Binding Results}" 
                     ItemTemplate="{StaticResource pushpinSelector}" />
            </bm:Map.Children>
        </bm:Map>

プッシュピンのカスタム スタイルを削除すると、マップを移動しなくてもデフォルトのプッシュピンが正しく表示されます。マップを手動で移動する必要なく、カスタム画鋲が同様に表示されることを望みます。事前に解決策をありがとう。

4

2 に答える 2

1

地図の押しピンのカスタム コントロールを使用してみましたか

提供されたユーザー コントロール テンプレートを使用してコントロールを作成し、必要なコンポーネント、イベントを追加し、必要なカスタマイズを行います。

例 :

CustomPushPin pushpin = new CustomPushPin(); mapView.Children.Add(pushPin); MapLayer.SetPosition(pushPin, location);

どこ 、

  1. CustomPushPin カスタム プッシュピン ユーザー コントロール。
  2. location は型クラス Location です。

問題が解決しない場合はお知らせください

于 2013-01-18T12:22:40.707 に答える
1

これは、理解するのにイライラするものでした。

最終的にたどり着いた解決策は、画鋲を追加するたびに Wiggle 効果を作成することでした。画鋲のリストを更新するたびに、MapBounds を変更します (カスタムの依存関係プロパティを介して)。

この方法では、次のように、マップの境界をわずかにポップアウトしてから、目的の境界にズームインします。

public static LocationRect GetMapBounds(DependencyObject obj)
{
    return (LocationRect)obj.GetValue(MapBoundsProperty);
}

public static void SetMapBounds(DependencyObject obj, LocationRect value)
{
    obj.SetValue(MapBoundsProperty, value);
}

public static readonly DependencyProperty MapBoundsProperty = DependencyProperty.RegisterAttached("MapBounds", typeof(LocationRect), typeof(MapBindings), new PropertyMetadata(null, OnMapBoundsChanged));

private static void OnMapBoundsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    var map = d as Bing.Maps.Map;
    if (map != null)
    {
        // sigh.  "Wiggle" the view to force map pins to appear
        LocationRect destRect = e.NewValue as LocationRect;
        if (destRect != null)
        {
            LocationRect wiggleRect = new LocationRect(destRect.Center, destRect.Width + 0.001,
                                                        destRect.Height + 0.001);

            map.SetView(wiggleRect, MapAnimationDuration.None);
            map.SetView(destRect, new TimeSpan(0, 0, 1));
        }
    }
}

これにより、ビューが自動的に移動し、プッシュピンがポップアップします。

ちょっとしたハックですが、少なくとも機能します。さらに、ビューが変更されたことをユーザーに示すために、ビューを少しポップするという副作用があります。

それが役立つことを願っています。

于 2013-05-29T22:38:04.047 に答える