/// <summary> /// 给单元对象的子对象添加自定义属性 /// </summary> /// <param name="cellEl"></param> private void AddCellChildProperty(CellHeaderElement cellEl) { ChildElementCollection elements = cellEl.GetChildren(); foreach (var el in elements) { var itemlibrary = ItemTypeLibrary.FindByName("库名1", Session.Instance.GetActiveDgnFile()); var itemType = itemlibrary.GetItemTypeByName("属性类型"); var host = new CustomItemHost(el, true); var instance = host.GetCustomItem("库名1", "属性类型"); if (null == instance) { instance = host.ApplyCustomItem(itemType); } instance.IsReadOnly = true; // instance.WriteChanges(); instance.ScheduleChanges(el); el.ReplaceInModel(el);//崩溃 cellEl.ReplaceInModel(el);//也会崩溃 } }
.NET C# 对ChildElement的封装确实有Bug,请改用C++ 或Interop那套C# 试一下。
符老师,您好,Interop我也测试过了,也是不行。现在就差用C++了。C++我这块还没积累,能不能用混合编程封装一个,供C#调用呢。
Interop可以替换,但是不能添加属性。用添加属性的子对象替换当前对象时,属性信息会丢失,只替换了模型对象。
请给我点时间,我写一个测试代码验证一下。
谢谢符老师