是否可以在 WPF 中使用 GMap.Net Windows Form dll?
Is it possible to use GMap.Net Windows Form dll in WPF?
我想在我的 WPF 项目中使用 GMap.net。
不幸的是,我找不到在 WPF 中使用 GMap.net 的任何好的参考资料,例如 this source 用于 windows 表单,并且对于每个部分我都必须进行大量搜索才能使用它。
我的第一个问题是关于如何在 WPF 中使用 GMap.net 有什么好的资源吗?
我的第二个问题是,我在 SO 中看到有人告诉我在 WPF 中使用了 GMap.NET.WindowsForms.dll 而不是 GMap.NET.WindowsPresentation.dll。可能吗?如果是,如何?
我在我的项目中添加了 GMap.NET.WindowsForms.dll 、GMap.NET.Core.dll 和 System.Windows.Forms 并将以下代码添加到 Window_Loaded 事件但是当项目 运行:
GMap.NET.WindowsForms.GMapControl gmap = new GMap.NET.WindowsForms.GMapControl();
gmap.MapProvider = GMap.NET.MapProviders.GoogleMapProvider.Instance;
GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerOnly;
gmap.Position = new GMap.NET.PointLatLng(48.8589507, 2.2775175);
gmap.Width = 500;
gmap.Height = 500;
gmap.Zoom = 13;
gmap.ShowCenter = false;
我没有找到任何特定于在 WPF 中使用 GMap 的文档,尽管我没有仔细查找。无论如何,api 非常相似。将 NuGet pkg GMap.NET.Presentation 添加到项目中后,您显示的代码只需要稍作修改:
GMap.NET.WindowsPresentation.GMapControl gmap = new GMap.NET.WindowsPresentation.GMapControl ();
gmap.MapProvider = GMap.NET.MapProviders.GoogleMapProvider.Instance;
GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerOnly;
gmap.Position = new GMap.NET.PointLatLng (48.8589507, 2.2775175);
gmap.Width = 500;
gmap.Height = 500;
gmap.Zoom = 13;
gmap.ShowCenter = false;
mainGrid.Children.Add (gmap);
Grid.SetColumn (gmap, 1);
gmap.Margin = new Thickness (10, 200, 10, 10);
最后 3 行假定您将其放入 Grid 控件中。更改它们以匹配您正在使用的内容。
至于你剩下的2个问题...是的,可以在WPF应用程序中使用Winforms版本。虽然我不得不问为什么因为它变得有点复杂和有限?但是,如果必须的话,您的代码基本上没问题。您需要将 WindowsFormsHost
控件添加到 WPF window 以承载 winforms GMap 控件。 XAML 会是这样的:
<WindowsFormsHost x:Name="wfHost" Margin="10,160,10,10"/>
然后在您的代码中,在设置 gmap 控件后,添加:
wfHost.Child = gmap;
它应该可以工作。
我认为您不会同时使用 GMap 库的 WPF 和 Winforms 版本。我尝试时遇到了很多冲突和错误...
我想在我的 WPF 项目中使用 GMap.net。 不幸的是,我找不到在 WPF 中使用 GMap.net 的任何好的参考资料,例如 this source 用于 windows 表单,并且对于每个部分我都必须进行大量搜索才能使用它。 我的第一个问题是关于如何在 WPF 中使用 GMap.net 有什么好的资源吗? 我的第二个问题是,我在 SO 中看到有人告诉我在 WPF 中使用了 GMap.NET.WindowsForms.dll 而不是 GMap.NET.WindowsPresentation.dll。可能吗?如果是,如何? 我在我的项目中添加了 GMap.NET.WindowsForms.dll 、GMap.NET.Core.dll 和 System.Windows.Forms 并将以下代码添加到 Window_Loaded 事件但是当项目 运行:
GMap.NET.WindowsForms.GMapControl gmap = new GMap.NET.WindowsForms.GMapControl();
gmap.MapProvider = GMap.NET.MapProviders.GoogleMapProvider.Instance;
GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerOnly;
gmap.Position = new GMap.NET.PointLatLng(48.8589507, 2.2775175);
gmap.Width = 500;
gmap.Height = 500;
gmap.Zoom = 13;
gmap.ShowCenter = false;
我没有找到任何特定于在 WPF 中使用 GMap 的文档,尽管我没有仔细查找。无论如何,api 非常相似。将 NuGet pkg GMap.NET.Presentation 添加到项目中后,您显示的代码只需要稍作修改:
GMap.NET.WindowsPresentation.GMapControl gmap = new GMap.NET.WindowsPresentation.GMapControl ();
gmap.MapProvider = GMap.NET.MapProviders.GoogleMapProvider.Instance;
GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerOnly;
gmap.Position = new GMap.NET.PointLatLng (48.8589507, 2.2775175);
gmap.Width = 500;
gmap.Height = 500;
gmap.Zoom = 13;
gmap.ShowCenter = false;
mainGrid.Children.Add (gmap);
Grid.SetColumn (gmap, 1);
gmap.Margin = new Thickness (10, 200, 10, 10);
最后 3 行假定您将其放入 Grid 控件中。更改它们以匹配您正在使用的内容。
至于你剩下的2个问题...是的,可以在WPF应用程序中使用Winforms版本。虽然我不得不问为什么因为它变得有点复杂和有限?但是,如果必须的话,您的代码基本上没问题。您需要将 WindowsFormsHost
控件添加到 WPF window 以承载 winforms GMap 控件。 XAML 会是这样的:
<WindowsFormsHost x:Name="wfHost" Margin="10,160,10,10"/>
然后在您的代码中,在设置 gmap 控件后,添加:
wfHost.Child = gmap;
它应该可以工作。
我认为您不会同时使用 GMap 库的 WPF 和 Winforms 版本。我尝试时遇到了很多冲突和错误...