WPF Bing Maps中的信息框

5

我最近开始在WPF中进行一些工作,想要将地图集成到我的应用程序中。我尝试了一些谷歌地图的东西,但是功能并不是很好,所以过了一段时间我就放弃了在WPF中使用谷歌地图。

后来不久之后,我遇到了必应地图。与谷歌地图相比,这看起来更有前途可以与WPF一起使用。我已经开始尝试使用Bing的地图,其功能非常出色!

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

是否可能仅使用xaml向图钉添加信息框?或者是否有任何其他好的替代方法?

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

1个回答

8
假设我理解您的需求,简单回答是:抱歉,使用XAML无法为标注添加类似于谷歌地图信息框的功能。但是,如果可以的话,我会尽力帮助您。

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

我猜想您不想使用内置的ToolTip,可能是因为您想让它看起来不同(即不只是黄色文本框),或者因为您希望当用户移开鼠标时,ToolTip不会消失。

如果您只是想让它看起来不同,我可以提供以下建议。当我为我的Pushpins指定模板时,我使用了一个重新设计的ToolTip,并允许用户单击Pushpin以获取更多信息。

带有自定义ToolTip的Bing Map

以下是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.
}

然而,我猜你想让工具提示不消失,这样用户就能在其中的控件上单击。不幸的是,我不确定有简单的方法来实现这一点。可能需要定义自己的自定义控件,当然需要一些C# / VB代码。
也许这个新控件可以派生自Pushpin,在鼠标悬停和/或单击时显示信息框内容。您可以使用VisualStateManager在XAML中保留大部分代码。 C# / VB只需提供一个依赖属性以及一些重写,以在正确的时间之间转换视觉状态。
希望这至少有点帮助!

1
这解释了很多,谢谢!我一直在寻找和尝试各种方法来让那个infobox在WPF上实现...哈哈哈,感谢你的信息!你的方法似乎是最好的方式。谢谢! :) - doc92

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接