描述
一个mxd里面包含了图层以及做好的版式,在开发时对模板进行了操作,保存的时候发现只有把mapcontrol保存了,PageLayoutControl里面没有保存,找了好久找不到原因。后来找到原因很无语。先上源代码
public void SaveProject()
{
try
{
string docPath = Hook.CurrentProject.Documentpath;
string m_mapDocumentName = Hook.M_MapControl.DocumentFilename;
//分为保存和另存为
if (!string.IsNullOrEmpty(m_mapDocumentName))//保存
{
//execute Save Document command
if (Hook.M_MapControl.CheckMxFile(m_mapDocumentName))
{
//create a new instance of a MapDocument
IMapDocument mapDoc = new MapDocumentClass();
mapDoc.Open(m_mapDocumentName, string.Empty);
//Make sure that the MapDocument is not readonly
if (mapDoc.get_IsReadOnly(m_mapDocumentName))
{
Hook.MainWindow.Invoke(new Action(() =>
{
Msg.Show("地图是只读的不能保存");
}));
mapDoc.Close();
return;
}
else
{
try
{
RenderTools.CopyAndOverwriteMap();//这个是讲mapcontrol里面的内容拷贝到pagelayoutcontrol里面的
Hook.MapTabControl.SelectedTabPageIndex = 1;
mapDoc.ReplaceContents((IMxdContents)Hook.M_PageControl.PageLayout);
mapDoc.ReplaceContents((IMxdContents)((MapControl)(Hook.M_MapControl.Object)).Map);
mapDoc.Save(true, true);
mapDoc.Close();
Hook.MapTabControl.SelectedTabPageIndex = 0;
Hook.CurrentProject.isSave = true;
}
catch (Exception ex)
{
}
}
}
}
else
{
ESRI.ArcGIS.SystemUI.ICommand cmd = new ESRI.ArcGIS.Controls.ControlsSaveAsDocCommand();
cmd.OnCreate(Hook.M_MapControl.Object);
cmd.OnClick();
}
}
catch (Exception ex)
{
Logger.Log.Write("地图文档保存失败" + ex.Message);
}
}
public static void CopyAndOverwriteMap()
{
IObjectCopy objectCopy = new ObjectCopyClass();//复制接口
object toCopyMap = Hook.M_MapControl.Map;//数据视图中的地图
object copiedMap = objectCopy.Copy(toCopyMap);//复制地图到缓存中
object toOverwriteMap = Hook.M_PageControl.ActiveView.FocusMap;//版面地图数据
Hook.M_PageControl.DocumentFilename = Hook.M_MapControl.DocumentFilename;
objectCopy.Overwrite(copiedMap, ref toOverwriteMap);
Hook.M_PageControl.ActiveView.Refresh();
Hook.M_PageControl.ActiveView.Extent = Hook.M_PageControl.ActiveView.FullExtent;
}
发现问题
pagelayoutCOntrol里面的东西没了
解决办法:
先替换mapcontrol,再替换pagelayoutcontrol
mapDoc.ReplaceContents((IMxdContents)((MapControl)(Hook.M_MapControl.Object)).Map);
mapDoc.ReplaceContents((IMxdContents)Hook.M_PageControl.PageLayout);
后记
奇葩