2011-09-26 3 views
5

최근에 WPF에서 몇 가지 작업을 시작했으며 맵을 내 응용 프로그램에 통합하기위한 아이디어를 생각해 냈습니다. Google Maps로 몇 가지 물건을 시험해 보았습니다.하지만 기능이 그렇게 좋지는 않습니다. 잠시 후 WPF에서 Google지도를 포기했습니다.WPF Bing Maps의 Infobox

잠시 후 Bing Maps에 부딪 혔습니다. WPF와 함께 사용할 Google지도보다 유망한 것으로 보입니다. Bing의지도를 가지고 놀기 시작했는데 기능이 훌륭합니다!

그러나지도 위에 압정을 넣으려고 할 때 고정 핀에 infobox를 추가하는 방법이 나에게 명확하지 않았습니다. 어떻게해야하는지 몇 가지 예제를 발견했지만 xaml에 연결된 절차 코드가 필요했습니다. 실제로 절차 코드를 사용하지 않고 메서드를 찾고있었습니다.

방금 ​​xaml을 사용하여 압핀에 infobox를 추가 할 수 있습니까? 아니면 누구든지 그렇게하는 방법에 대한 좋은 대체 방법이 있습니까?

사용할 수있는 툴팁 속성이 있지만 실제로 찾고있는 것이 아닙니다. 실제로 Google지도의 압정 스타일을 찾고있었습니다 (사용 가능한 경우).

답변

8

내가 원하는 것을 정확하게 이해한다고 가정하면 짧은 대답입니다. 죄송 합니다만 XAML만으로 압정에 Google지도 스타일 정보 상자를 추가 할 수는 없습니다. 그러나 가능한 한 도와 드리겠습니다.

면책 조항 : 저는 Silverlight 용 Bing Maps 컨트롤을 사용 해왔으므로 WPF 버전의 컨트롤에도 적용될 수 있기를 바랍니다.

텍스트가있는 노란색 상자가 아니라 다른 모양으로 보이기를 원하거나 사용자가 텍스트 상자를 움직일 때 사라지지 않게하려면 기본 제공 도구 설명을 사용하고 싶지 않다고 생각합니다. 마우스를 멀리.

다르게 보길 원하면 다음을 제공 할 수 있습니다. 푸시 핀에 대한 템플릿을 지정할 때 미리 템플리트 화 된 툴팁을 사용하고 사용자가 압정을 클릭하여 자세한 정보를 얻을 수있었습니다. 여기

Bing Map with custom ToolTip

당신이 원하는 무엇이든 포함 할 수 물론 정적 리소스로 정의 도구 설명 템플릿입니다 :

<Style x:Key="MyToolTipStyle" TargetType="ToolTip"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Border CornerRadius="5" BorderBrush="Black" BorderThickness="2" Background="#5c87b2"> 
        <ContentPresenter Margin="5"> 
         <ContentPresenter.Content> 
          <StackPanel Margin="5" MaxWidth="400"> 
           <TextBlock Text="{Binding Name}" FontWeight="Bold" FontSize="16" Foreground="White" TextWrapping="Wrap"/> 
           <TextBlock Text="{Binding Description}" Foreground="White" TextWrapping="Wrap"/> 
          </StackPanel> 
         </ContentPresenter.Content> 
        </ContentPresenter> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

을 그리고 여기 내가 사용하는 곳입니다 : 다음

<maps:Map> 
    <maps:MapItemsControl ItemsSource="{Binding SearchResultsManager.Items}"> 
     <maps:MapItemsControl.ItemTemplate> 
      <DataTemplate> 
       <maps:Pushpin Location="{Binding Location}" Cursor="Hand" MouseLeftButtonUp="Pushpin_MouseLeftButtonUp"> 
        <ToolTipService.ToolTip> 
         <ToolTip Style="{StaticResource MyToolTipStyle}" /> 
        </ToolTipService.ToolTip> 
       </maps:Pushpin> 
      </DataTemplate> 
     </maps:MapItemsControl.ItemTemplate> 
    </maps:MapItemsControl> 
</maps:Map> 

을 사용자가 고정 핀을 클릭하여 세부 정보 영역으로 가져 가면 처리 할 수 ​​있습니다.

private void Pushpin_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    // Get a reference to the object that was clicked. 
    var clickedSearchResult = (sender as FrameworkElement).DataContext as SearchResultViewModel; 

    // Do something with it. 
} 

그러나 사용자가 컨트롤을 클릭 할 수 있도록 툴팁이 사라지지 않도록하고 싶다고 생각합니다. 불행히도, 나는 그것을 할 수있는 간단한 방법이 있는지 확신하지 못합니다. 물론 사용자 지정 컨트롤을 정의해야 할 수도 있습니다. 물론 C#/VB 코드가 필요합니다.

아마도이 새 컨트롤은 Pushpin에서 파생 될 수 있으며 마우스 오버 및/또는 클릭시 정보 상자 내용을 표시 할 수 있습니다. VisualStateManager를 사용하여 대부분의 코드를 XAML에 보관할 수 있습니다. C#/VB는 콘텐츠에 대한 종속성 속성을 제공하고 시각적 상태를 올바른 시간에 전환하기위한 몇 가지 재정의를 제공해야합니다.

적어도 조금 도움이 되었길 바랍니다.

+1

많은 설명을 해주셔서 감사합니다! 나는 WPF에서 그 infobox를 만들기 위해 온갖 종류의 것들을보고 노력했다. Hahah는 정보에 감사한다! 당신은 방법이 가장 좋은 방법 인 것처럼 보입니다. 고맙습니다! :) – doc92

관련 문제