【发布时间】:2018-08-31 18:30:30
【问题描述】:
我想在 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.Layers.ILayer' 来自程序集 'SharpMap, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'。
所以我的问题是:
1. 我遗漏了哪些步骤导致 GitHub 中的示例 WPF SharpMap 项目无法正常工作(打开 VS 时我没有收到任何错误)? 现已解决.尽管使用了 VS2017,但它只安装了 .NET 4.6.1,添加 .NET 4.7.2 解决了这个问题。没有警告它指向错误的框架版本,所以解决这个问题只是运气。
- 为了让准系统 SharpMap 正常工作,我在下面的代码中遗漏了什么? 不幸的是,该文档缺乏任何 WPF 支持,我找不到任何其他示例,因此从这里开始将是反复试验。
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:
好的,所以我根本无法让 SharpMap 在我的 WPF 应用程序中工作。自从更新我的 .NET 框架后,我重新访问了 MapSui 并发现示例按预期工作。然后我使用这个简单的指南将 MapSui 应用到我的项目中: MapSui Startup Guide 它运行良好。我仍然认为我的问题值得其他想要使用 WPF 和 SHARPMap 的人回答,但是,我将继续使用 MapSui。
【问题讨论】:
-
问题 1 现已解决。尽管使用了 VS2017,它只安装了 .NET 4.6.1,加起来 .NET 7.2 解决了这个问题。没有警告它指向错误的框架版本,所以解决这个问题只是运气。仍在为问题 2 苦苦挣扎,但至少解决了一个问题。