我想在WPF应用程序中使用SharpMap,但是我不知道如何使用此控件。到目前为止,这是我一直尝试的方法,也是我所面临的死胡同。
使用Github上的WPFExample: SharpMap on GitHub。
首先,我尝试在VS Community 2017中打开SharpMap.Sln。由于剪切的错误数量,我无法构建应用程序。请参见下面的屏幕截图。我尝试重新安装所有nuget软件包,没有任何变化,清理,构建等,但没有任何乐趣。列出太多错误,这些错误主要与缺少名称空间等有关。
然后,我再次尝试仅打开WPFSamples项目,重新安装Nuget程序包,并最终添加所有其他引用的项目,但这只会使错误列表更长。
然后我尝试启动一个新的WPF应用程序并添加以下Nuget包:
SharpMaps
SharpMaps.UI
,然后从GitHub上的示例调试文件夹中手动添加SharpMaps.UI.Wpf.dll。我使用的XAML如下。后面没有代码。该解决方案将构建为没有错误,但是,当我尝试运行该解决方案时,它会出现以下错误:
System.Windows.Markup.XamlParseException:''的调用 类型“ SharpMap.UI.WPF.SharpMapHost”上的构造函数 指定的约束条件引发了异常。”行号“ 30” 和线位置“ 10”。 TypeLoadException:无法加载类型 程序集'SharpMap,Version = 1.0.0.0中的'SharpMap.Layers.ILayer', Culture = neutral,PublicKeyToken = null”。
所以我的问题是:
1.我缺少哪些步骤阻止GitHub中的示例WPF SharpMap项目正常工作(打开VS时没有错误)? 现在已解决。尽管使用VS2017,但仅安装了.NET 4.6.1,将.NET 7.2加起来解决了该问题。没有警告说它指向了错误的框架版本,因此解决这个问题只是运气。
XAML:
<Window x:Class="SharpMap.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SharpMap"
xmlns:smh="clr-namespace:SharpMap.UI.WPF;assembly=SharpMap.UI.WPF"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
<Grid Name="grid1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Menu Grid.Row="0" Name="Menu">
<MenuItem Header="_File">
<MenuItem Header="_Exit"/>
</MenuItem>
<MenuItem Header="_Add Layer">
<MenuItem Header="_ShapeFile" Name="AddShapeLayer"/>
</MenuItem>
<MenuItem Header="_BackgroundMap">
<MenuItem Header="_OpenStreetMap" Name="BgOsm" />
<MenuItem Header="_MapQuest" Name="BgMapQuest" />
</MenuItem>
</Menu>
<smh:SharpMapHost Name="WpfMap" Grid.Row="1"></smh:SharpMapHost>
<StatusBar Grid.Row="2">
<StatusBarItem Name="Coordinates" HorizontalAlignment="Right">
<Label Content="{Binding CurrentMouseCoordinateString, ElementName=WpfMap, UpdateSourceTrigger=PropertyChanged}"></Label>
</StatusBarItem>
</StatusBar>
</Grid>
</Window>
为完整起见,后面的代码(实际上没有任何更改)
using System;
using System.Windows;
using System.Windows.Forms;
using SharpMap;
using SharpMap.Forms;
using GeoAPI.Geometries;
using Application = System.Windows.Application;
using MenuItem = System.Windows.Controls.MenuItem;
namespace SharpMap
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
编辑:
我还尝试过使用使用SharpMap并支持WPF的MapSui,但是我仍然发现我无法在GitHub上运行示例,文档也无法用于构建示例。
编辑2:
好,所以我根本无法在WPF应用程序中使用SharpMap。自更新.NET框架以来,我重新访问了MapSui,并发现示例按预期工作。然后,我使用以下简单指南将MapSui应用于我的项目: MapSui Startup Guide,而且效果很好。我仍然认为我的问题应该为其他想使用WPF和SHarpMap的人提供答案,但是,我将继续使用MapSui。
答案 0 :(得分:0)
关于问题1,我还升级到了.Net 7.2,但它没有更改,我的WinformHost仍然不可见。 我终于明白了为什么:我的主窗口有一个“ AllowsTransparency = True”参数。只是阻止了WinformHost的显示...将其更改为False即可使用。