【问题标题】:How to use 'SharpMap' WPF Control如何使用“SharpMap”WPF 控件
【发布时间】:2018-08-31 18:30:30
【问题描述】:

我想在 WPF 应用程序中使用 SharpMap,但是我不知道如何使用这个控件。这是我迄今为止所尝试的,也是我所面临的死胡同。

使用 Github 上提供的 WPFExample: SharpMap on GitHub.

首先我尝试在 VS Community 2017 中打开 SharpMap.Sln。 由于错误数量过多,我无法构建应用程序。请参阅下面的屏幕截图。我已经尝试重新安装所有 nuget 包,没有任何改变、干净、构建等,没有任何乐趣。主要围绕缺少命名空间等的错误太多,无法列出。

然后我尝试只打开 WPFSamples 项目,再次重新安装 Nuget 包,最后添加引用的任何其他项目,但这只会使错误列表更长。

然后我尝试启动一个新的 WPF 应用程序并添加以下 Nuget 包:

  1. SharpMaps

  2. 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 解决了这个问题。没有警告它指向错误的框架版本,所以解决这个问题只是运气。

  1. 为了让准系统 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 苦苦挣扎,但至少解决了一个问题。

标签: c# wpf sharpmap


【解决方案1】:

关于问题 1,我也升级到了 .NET 4.7.2 但并没有改变,我的WinformHost 仍然不可见。 我终于明白为什么会这样了:我的主窗口有一个AllowsTransparency=True 参数。这只会阻止 WinformHost 显示...将其更改为 False 即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多