2011-09-26 102 views
5

我最近開始在WPF中做一些東西,並想出了一個將地圖集成到我的應用程序中的想法。我嘗試了一些使用谷歌地圖的東西,但功能並不是那麼棒,所以過了一段時間,我放棄了WPF中的Google地圖。WPF Bing地圖中的信息框

過了一會兒,我碰到了Bing地圖。這看起來比谷歌地圖更有希望與WPF一起使用。我已經開始使用必應的地圖,並且功能非常棒!

但是,當我試圖在地圖上放置圖釘時,我並不清楚如何在圖釘上懸停時添加信息框。我發現了一些例子,如何做到這一點,但它需要鏈接到xaml的程序代碼。我實際上正在尋找一種不使用程序代碼的方法。

是否可以添加一個信息框到xaml的圖釘?或者有沒有人有一個好的替代方法如何做到這一點?

雖然有一個工具提示屬性,但我實際上並沒有在尋找。我實際上是在尋找Google Maps的圖釘樣式(如果有的話)。

回答

8

假設我正確你想要什麼瞭解,我認爲簡單的答案是:很抱歉,但它不可能對谷歌的-地圖式信息框添加到圖釘只用XAML。不過,如果可以的話,我會盡力提供幫助。

聲明:我一直在玩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代碼。

也許這新的控制可以從圖釘派生,它可以顯示在鼠標懸停在信息框中的內容和/或點擊。您可以使用VisualStateManager將大部分代碼保留在XAML中。在C#/ VB將只需要提供內容和部分覆蓋在正確的時間可視狀態之間的過渡依賴屬性。

我希望這至少有點幫助!

+1

這說明了很多,謝謝!我一直在尋找和嘗試各種各樣的事情,只是在WPF中做信息框..哈哈感謝信息!你的方法似乎是最好的選擇。謝謝! :) – doc92