【问题标题】:Infobox in WPF Bing MapsWPF 必应地图中的信息框
【发布时间】:2011-09-26 12:26:26
【问题描述】:

我最近开始在 WPF 中做一些事情,我想出了一个将地图集成到我的应用程序中的想法。我用谷歌地图尝试了一些东西,但功能不是很好,所以过了一段时间我放弃了 WPF 中的谷歌地图。

不久之后,我遇到了 Bing 地图。这看起来比谷歌地图与 WPF 一起使用更有希望。我已经开始玩 Bing 的地图,功能很棒!

但是,当我尝试在地图上放置图钉时,当我将鼠标悬停在图钉上时,我并不清楚如何向图钉添加信息框。我找到了一些示例,但它需要链接到 xaml 的过程代码。我实际上是在寻找一种不使用过程代码的方法。

是否可以仅使用 xaml 将信息框添加到图钉?或者有人有一个很好的替代方法吗?

虽然有一个可用的工具提示属性,但我实际上并不是在寻找它。我实际上是在寻找 Google Maps 的图钉样式(如果有的话)。

【问题讨论】:

    标签: wpf xaml bing-maps pushpin


    【解决方案1】:

    假设我正确理解您想要的内容,我相信简短的回答是:抱歉,仅使用 XAML 无法将 Google 地图样式的信息框添加到图钉。不过,如果可以的话,我会尽力提供帮助。

    免责声明:我一直在使用 Silverlight 的 Bing 地图控件,因此希望这也适用于 WPF 版本的控件。

    我想您不想使用内置工具提示,因为您希望它看起来不同(即不仅仅是一个带有文本的黄色框),或者因为您希望它在用户移动鼠标时不会消失离开。

    如果您只是想让它看起来与众不同,我可以提供以下内容。当我为我的图钉指定模板时,我继续使用重新模板化的工具提示,并允许用户单击图钉以获取更多信息。

    这是 ToolTip 模板,定义为 StaticResource,当然可以包含您想要的任何内容:

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

    但是,我想您想让 ToolTip 不消失,以便用户可以单击其中的控件。不幸的是,我不确定是否有一种简单的方法可以做到这一点。您可能必须定义自己的自定义控件,这当然需要一些 C#/VB 代码。

    也许这个新控件可以派生自图钉,它可以在鼠标悬停和/或单击时显示信息框内容。您可以使用 VisualStateManager 将大部分代码保留在 XAML 中。 C#/VB 只需要为内容提供一个依赖属性和一些覆盖,以便在正确的时间在视觉状态之间进行转换。

    我希望这至少有点帮助!

    【讨论】:

    • 这解释了很多,谢谢!我一直在寻找并尝试各种方法以仅在 WPF 中制作该信息框。哈哈,谢谢您提供的信息!你的方法似乎是最好的方法。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多