2011-09-26 25 views
5

Gần đây tôi đã bắt đầu thực hiện một số nội dung trong WPF và tôi đã đưa ra ý tưởng tích hợp bản đồ vào ứng dụng của mình. Tôi đã thử một số công cụ với Google Maps, nhưng khả năng không phải là tuyệt vời, vì vậy sau một thời gian tôi đã từ bỏ trên Google Maps trong WPF.Infobox trong WPF Bản đồ Bing

Một thời gian ngắn sau, tôi đã truy cập vào Bản đồ Bing. Điều này có vẻ hứa hẹn hơn Google Maps để sử dụng với WPF. Tôi đã bắt đầu chơi xung quanh với Bản đồ của Bing và khả năng là tuyệt vời!

Tuy nhiên, khi tôi cố gắng đặt một đinh ghim trên bản đồ, ngay lập tức tôi không rõ cách thêm một hộp thông tin vào đinh ghim, khi di chuột qua nó. Tôi đã tìm thấy một số ví dụ làm thế nào để làm như vậy, nhưng nó yêu cầu mã thủ tục liên kết với xaml. Tôi đã thực sự tìm kiếm một phương pháp mà không cần sử dụng mã thủ tục.

Có thể thêm một hộp thông tin vào đinh ghim chỉ với xaml không? Hay bất cứ ai có một phương pháp thay thế tốt về cách làm như vậy?

Có một thuộc tính tooltip có sẵn, nhưng tôi đã không thực sự tìm kiếm điều đó. Tôi đã thực sự tìm kiếm kiểu đinh ghim của Google Maps (nếu nó có sẵn).

Trả lời

8

Giả sử tôi hiểu chính xác những gì bạn muốn, tôi tin câu trả lời ngắn gọn là: Xin lỗi, nhưng không thể thêm hộp thông tin kiểu Google-Maps vào đinh ghim chỉ với XAML. Tuy nhiên, tôi sẽ cố gắng giúp đỡ nếu tôi có thể.

Tuyên bố từ chối trách nhiệm: Tôi đã chơi với điều khiển Bản đồ Bing cho Silverlight, vì vậy hy vọng điều này cũng sẽ áp dụng cho phiên bản WPF của điều khiển.

Tôi tưởng tượng bạn không muốn sử dụng chú giải công cụ tích hợp vì bạn muốn nó trông khác (nghĩa là không chỉ hộp màu vàng có văn bản) hoặc vì bạn muốn nó không biến mất khi người dùng di chuyển chuột đi.

Nếu bạn chỉ muốn nó trông khác, tôi có thể cung cấp những điều sau đây. Khi tôi chỉ định một mẫu cho Pushpins của mình, tôi đã tiếp tục và sử dụng Chú giải công cụ được tô điểm lại và cho phép người dùng nhấp vào đinh ghim để biết thêm thông tin.

Bing Map with custom ToolTip

Dưới đây là các mẫu ToolTip, định nghĩa là một StaticResource, trong đó tất nhiên có thể chứa bất cứ điều gì bạn muốn:

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

Và đây là nơi mà tôi đã sử dụng nó:

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

Sau đó, Tôi sẽ xử lý khi người dùng nhấp vào đinh ghim để đưa họ đến khu vực chi tiết.

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. 
} 

Tuy nhiên, tôi tưởng tượng bạn muốn giữ Chú giải công cụ biến mất để người dùng có thể nhấp vào các điều khiển bên trong nó. Thật không may, tôi không chắc chắn có một cách đơn giản để làm điều đó. Bạn có thể phải xác định điều khiển tùy chỉnh của riêng bạn, mà tất nhiên sẽ yêu cầu một số mã C#/VB.

Có lẽ điều khiển mới này có thể lấy được từ Pushpin và có thể hiển thị nội dung của hộp thông tin khi di chuột qua và/hoặc nhấp. Bạn có thể sử dụng VisualStateManager để giữ hầu hết mã trong XAML. C#/VB sẽ chỉ phải cung cấp một thuộc tính phụ thuộc cho nội dung và một số ghi đè để chuyển đổi giữa các trạng thái trực quan vào đúng thời điểm.

Tôi hy vọng đó là ít nhất một chút hữu ích!

+1

Điều đó giải thích rất nhiều, cảm ơn bạn! Tôi tiếp tục tìm kiếm và cố gắng tất cả mọi thứ để làm cho thông tin đó chỉ trong WPF .. Hahah cảm ơn thông tin! Phương pháp của bạn dường như là cách tốt nhất để đi. Cảm ơn bạn! :) – doc92

Các vấn đề liên quan