2011-02-01 3 views
1

地図コントロールにいくつかの押しボタンがあります。私はそれを無効にするために、ユーザーが地図内をナビゲートすることを望んでいない。しかし、私はユーザーがPushpinをタップすることができるようにしたい(と私は詳細ページに移動するイベントで)。固定地図での押し込みの処理

ただし、Map.IsEnabledがfalseの場合、Pushpinsはジェスチャを受け取っていないようです。私はまた、IsHitTestVisibleを使ってみましたが、運がありません。

私が何をしようとしているかを示すコード。誰にもアイデアはありますか? falseからIsEnabledの設定

<maps:Map Name="Map" 
      VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
      CopyrightVisibility="Collapsed" LogoVisibility="Collapsed" ScaleVisibility="Collapsed" ZoomBarVisibility="Collapsed" 
      IsEnabled="False"> 
    <maps:MapItemsControl ItemsSource="{Binding TheCollection}"> 
     <maps:MapItemsControl.ItemTemplate> 
      <DataTemplate> 
       <maps:Pushpin Name="Pin" Location="{Binding Coordinate}" Content="{Binding Ix}"> 
        <maps:Pushpin.Background> 
         <SolidColorBrush Color="{StaticResource PhoneAccentColor}"/> 
        </maps:Pushpin.Background> 

        <toolkit:GestureService.GestureListener> 
         <toolkit:GestureListener Tap="PinTap" /> 
        </toolkit:GestureService.GestureListener> 
       </maps:Pushpin> 
      </DataTemplate> 
     </maps:MapItemsControl.ItemTemplate> 
    </maps:MapItemsControl> 
</maps:Map> 

答えて

1

は、あなたが見てきたとして、子供Pushpinに影響を与え、ユーザ入力に応答からMap制御を防ぐことができます。

  1. 防ぐことができますされ、Map制御上のすべてのジェスチャーイベントを処理し、truee.Handledを設定します。あなたはマップが読み取り専用ことがなく、Pushpinは、ジェスチャーに反応したい場合は、私は次の2つのオプションがあると思いますMap自体がイベントを処理することはありませんが、PushPinはタップジェスチャーを自由に処理する必要があります。
  2. MapWriteableBitmapを作成して、代わりにすることを示し、その後、(注上Pushpinを表示:私はPushpin制御がMapコントロールの外に動作しませんと思われるので、あなたが作成する必要があるだろう/再テンプレートをPushpinのようにテンプレートします)。

UPDATE:あなたはそれを「読み取り専用」と表示させるためにMapに処理する必要がなく、有効に残るイベントはMapPanMapZoomです。

+0

私はそれを試みます。そして、はい、プッシュピンは地図の外で動作します。私はそれを付随するListBoxで使用して、リストとマップ内の項目の「見た目」を同じにします。 – Ostemar

+0

"すべてのジェスチャーイベントを処理"する方法に関するアイデア。私は操作[Started、Delta、Completed]とMouseLeftButton [Down、Up]を処理し、e.Handledをtrueに設定しました。それらは助けにならない。もう私は何かをするべきですか? – Ostemar

+0

「TouchPan」、「TouchRotate」、および「TouchZoom」が最も候補者です。イベントの完全な一覧は、http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.map_events.aspxを参照してください。正直言って、インタラクティブなレイヤーを持つ読み取り専用マップが必要な場合は、 'WriteableBitmap'アプローチを使う方が良いと思います。 –

1

これは、私がMSDNを多くのテストと閲覧後に解決した方法です。 Windows Phoneのマップコントロールでは、少し違っています(MSDN参照)。通常のSilverlightと比較して新しい動作とイベントがあります。

<maps:Map Name="Map" 
      VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
      CopyrightVisibility="Collapsed" LogoVisibility="Collapsed" ScaleVisibility="Collapsed" ZoomBarVisibility="Collapsed" 
      MapZoom="Map_MapZoom" MapPan="Map_MapPan"> 
    <maps:MapItemsControl ItemsSource="{Binding TheCollection}"> 
     <maps:MapItemsControl.ItemTemplate> 
      <DataTemplate> 
       <maps:Pushpin Name="Pin" Location="{Binding Coordinate}" Content="{Binding Ix}"> 
        <maps:Pushpin.Background> 
         <SolidColorBrush Color="{StaticResource PhoneAccentColor}"/> 
        </maps:Pushpin.Background> 

        <toolkit:GestureService.GestureListener> 
         <toolkit:GestureListener Tap="PinTap" /> 
        </toolkit:GestureService.GestureListener> 
       </maps:Pushpin> 
      </DataTemplate> 
     </maps:MapItemsControl.ItemTemplate> 
    </maps:MapItemsControl> 
</maps:Map> 

... 

private void Map_MapPan(object sender, MapDragEventArgs e) 
{ 
    e.Handled = true; 
} 

private void Map_MapZoom(object sender, MapZoomEventArgs e) 
{ 
    e.Handled = true; 
} 
+0

それで、私自身の質問に答えるのはちょっと自信があるようです...しかし、私はDereksの提案をしていませんでした。私は知っている、私は知っている、解決策はDereksの提案のいずれかの近くにあるが、同時に少し曖昧である。私はマークの答えをここで扱う方法がわかりません。それは私の最初の質問ですが、私は半回答しか持っていませんが、これは通常これをここではどのように見ていますか? (犯行はない - デレク - 私は助けに感謝する)どんな提案? – Ostemar

+0

最後にあなたの問題の解決策を得てうれしく思います。これはSOがすべてについてです。私はかなり新しい自分なので、通常のアプローチが何であるか分かりません。私が知ることから、あなたは私が与えた答えを使って問題を解決しました: "1. Mapコントロール上のすべてのジェスチャーイベントを処理し、e.Handledをtrueに設定します";私はちょうど対処するために正確なイベントを示していませんでした。個人的には、あなたが私の答えを受け入れるなら、私はそれを望んでいます(私は正しい出来事でそれを更新します)が、あなたがしたくないと思っています。 –

+0

私は先に進み、それを受け入れました。私たちは一緒にそれを解決しました。 :) – Ostemar

関連する問題