Dan Desjardins
Спасибо Грэму - я действительно наткнулся на него, - но решил пробежать каждый его шаг медленно и обдуманно. При этом я узнал, как делать то, что мне нужно, - так что, хотя это все еще было больше о работе полностью в WPF, я смог "интерполировать" то, что мне нужно. Поэтому для тех, кто хочет включить пользовательские кнопки на элементе управления WPF в приложении WinForms, вот как это делается.
В вашем WPF usercontrol вам нужно будет добавить раздел под названием < usercontrol. resources> следующим образом
<UserControl.Resources>
<ControlTemplate x:Key="yourtemplatenamehere" TargetType="m:Pushpin">
.... the template constructors here
</ControlTemplate>
</UserControl.Resources>
Поместите эту секунду чуть выше раздела "сетка".
Теперь в этом примере была довольно уродливая кнопка, определенная в контрольной панели, поэтому я улучшил ее (с большим количеством экспериментов). Таким образом, весь мой ControlTemplate выглядит следующим образом
<UserControl.Resources >
<ControlTemplate x:Key="MyNewPushpin" TargetType="m:Pushpin">
<Grid x:Name="ContentGrid" HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel>
<Grid Margin="0" Width="24" Height="23">
<Rectangle HorizontalAlignment="Left" Margin="0,3.238,0,-2.146" Width="23" Height="18" Fill="SteelBlue" Stroke="Black" RenderTransformOrigin="0.5,0.62">
<Rectangle.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform AngleY="0" AngleX="-23"/>
<RotateTransform Angle="123"/>
<TranslateTransform/>
</TransformGroup>
</Rectangle.RenderTransform>
</Rectangle>
<Rectangle Fill="{TemplateBinding Background}" Stroke="black" RadiusX="5" RadiusY="5"/>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Margin="0" TextBlock.FontFamily="Segoe UI" TextBlock.FontWeight="Bold" TextBlock.Foreground="Black" >
</ContentPresenter>
</Grid>
</StackPanel>
</Grid>
</ControlTemplate>
</UserControl.Resources>
Итак, теперь весь фокус в том, чтобы выяснить, как получить доступ к этому шаблону в winforms...
Ну, пользовательского элемента управления хранится в моей WinForms приложения с помощью
Совместимость WPF контроль. Он, как и ваши текстовые поля, метки и панели, является одним из элементов управления, доступных в вашем наборе инструментов после добавления ссылки на него.
WindowsFOrmsIntegration и
Майкрософт.Карты.Элементом управления mapcontrol.В WPF Чтобы получить их, вам нужно скачать и установить WPF Map SDK, который вы получаете отсюда...
https://msdn.microsoft.com/en-us/library/hh750210.aspx?f=255&MSPPError=-2147217396
Когда вы добавляете
Совместимость WPF контроль вы получаете возможность добавить созданный вами элемент управления WPF.
Теперь вы можете получить доступ к шаблону внутри этого элемента управления следующим образом
Dim NewPushpin As System.Windows.Controls.ControlTemplate = BingMapUC.FindResource("MyNewPushpin")
Затем создайте экземпляр и представьте свои кнопки в коде
Dim Pin As New Pushpin
Pin.Location = New Location(Latitude, Longitude)
Pin.Content = "a pin"
Pin.Name = "Pin_" & Counter
Pin.Template = NewPushpin
Pin.Background = Windows.Media.Brushes.YellowGreen
MyBingMapUC.Map.Center = Pin.Location
MyBingMapUC.Map.ZoomLevel = STATE_VIEW
MyBingMapUC.Map.Children.Add(Pin)
В моем шаблоне я выставил фон кнопки, чтобы его можно было изменить по мере необходимости. Это дало мне некоторую гибкость, в которой я нуждался.
Если вы не знаете как собрать WPF usercontrol для использования в winform здесь есть приличный учебник:
https://blogs.msdn.microsoft.com/rbrundritt/2013/11/08/using-bing-maps-in-winforms/