Предполагая, что я правильно понимаю, что вы хотите, я считаю, что краткий ответ таков: извините, но невозможно добавить информационное поле в стиле Google-Maps к кнопке с помощью только XAML. Однако я постараюсь помочь, если смогу.
Отказ от ответственности: я играл с элементом управления Bing Maps для Silverlight, поэтому, надеюсь, это будет применимо и к WPF-версии элемента управления.
Я полагаю, что вы не хотите использовать встроенную всплывающую подсказку, потому что хотите, чтобы она выглядела иначе (т.е. не просто желтая рамка с текстом), или потому, что вы хотите, чтобы она не исчезала, когда пользователь перемещает мышь прочь.
Если вы просто хотите, чтобы это выглядело иначе, я могу предложить следующее. Когда я указал шаблон для своих кнопок, я использовал повторно всплывающую подсказку и позволил пользователю щелкнуть кнопку для получения дополнительной информации.
Вот шаблон всплывающей подсказки, определенный как 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 просто должен предоставить свойство зависимости для содержимого и некоторые переопределения для перехода между визуальными состояниями в правильное время.
Надеюсь, это хоть немного поможет!