基于WPF的ArcEngine的开发流程在帮助文档中已经有详细的介绍,其他人也写了不少关于这个方面,这里记录一下自己遇到的问题。以下几个方面需要注意:
1.ArcGis控件问题
问题:在新建AxMapControl,AxToolbarControl的时候,发现无dll,而引用了 using ESRI.ArcGIS.Controls
解决方法:引用ESRI.ArcGIS.AxControls.dll 引用
2.异常
问题:System.Windows.Forms.AxHost.InvalidActiveXStateException”类型的异常
原因:猜测为控件未创建完成导致错误
解决方法:创建控件要和wpf控件一起创建,也就是写在构造函数中,而绑定mapcontrol、设置控件命令等在控件创建完成之后(可以在窗体loaded事件中)
public partial class MainWindow : Window
{
ESRI.ArcGIS.Controls.AxMapControl _mapControl;
private AxToolbarControl _toolbarControl1;
private AxToolbarControl _toolbarControl2;
public MainWindow()
{
InitializeComponent();
initAECtrl();
}
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
SetControlProperty();
}
private void initAECtrl()
{
_mapControl = new AxMapControl();
mapHost.Child = _mapControl;
_toolbarControl1 = new AxToolbarControl();
//_toolbarControl1.SetBuddyControl(_mapControl);//这样会报错
toolbar1Host.Child = _toolbarControl1;
//添加命令
// _toolbarControl1.AddItem("esriControls.ControlsOpenDocCommand", -1, -1, false, -1, ESRI.ArcGIS.SystemUI.esriCommandStyles.esriCommandStyleIconOnly);
_toolbarControl2 = new AxToolbarControl();
// _toolbarControl2.SetBuddyControl(_mapControl);
toolbar2Host.Child = _toolbarControl2;
}
private void SetControlProperty()
{
_toolbarControl1.SetBuddyControl(_mapControl);
//添加命令
_toolbarControl1.AddItem("esriControls.ControlsOpenDocCommand", -1, -1, false, -1, ESRI.ArcGIS.SystemUI.esriCommandStyles.esriCommandStyleIconOnly);
_toolbarControl2.SetBuddyControl(_mapControl);
}
}