假设我理解您的需求,简单回答是:抱歉,使用XAML无法为标注添加类似于谷歌地图信息框的功能。但是,如果可以的话,我会尽力帮助您。
免责声明:我一直在使用Silverlight的Bing Maps控件进行实验,因此希望这也适用于WPF版本的控件。
我猜想您不想使用内置的ToolTip,可能是因为您想让它看起来不同(即不只是黄色文本框),或者因为您希望当用户移开鼠标时,ToolTip不会消失。
如果您只是想让它看起来不同,我可以提供以下建议。当我为我的Pushpins指定模板时,我使用了一个重新设计的ToolTip,并允许用户单击Pushpin以获取更多信息。
![带有自定义ToolTip的Bing Map](https://istack.dev59.com/bU4Xc.webp)
以下是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="" FontWeight="Bold" FontSize="16" Foreground="White" TextWrapping="Wrap"/>
<TextBlock Text="" 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)
{
var clickedSearchResult = (sender as FrameworkElement).DataContext as SearchResultViewModel;
}
然而,我猜你想让工具提示不消失,这样用户就能在其中的控件上单击。不幸的是,我不确定有简单的方法来实现这一点。可能需要定义自己的自定义控件,当然需要一些C# / VB代码。
也许这个新控件可以派生自Pushpin,在鼠标悬停和/或单击时显示信息框内容。您可以使用VisualStateManager在XAML中保留大部分代码。 C# / VB只需提供一个依赖属性以及一些重写,以在正确的时间之间转换视觉状态。
希望这至少有点帮助!