如何通过Revit API C#修改已加载共享参数的ShouldHideWhenNoValue属性
修改已加载共享参数的ShouldHideWhenNoValue属性
要修改Revit项目中已加载共享参数的ShouldHideWhenNoValue属性,需借助Revit API的事务机制,结合共享参数定义的编辑方法实现,具体操作如下:
- 先通过你提供的代码获取目标
SharedParameterElement - 共享参数的定义为
ExternalDefinition类型,无法直接修改属性,需创建新的定义选项并调用编辑方法完成更新 - 所有修改操作必须包裹在**事务(Transaction)**中执行,否则Revit会抛出API异常
完整实现代码
using Autodesk.Revit.DB; using Autodesk.Revit.UI; public void ModifySharedParameterHideSetting(UIApplication uiApp) { UIDocument uiDoc = uiApp.ActiveUIDocument; Document doc = uiDoc.Document; Guid targetParamGuid = ADSK.Tolshina_Stenki; // 你的目标参数GUID // 获取目标SharedParameterElement var sharedParamElem = new FilteredElementCollector(doc) .OfClass(typeof(SharedParameterElement)) .WhereElementIsNotElementType() .Cast<SharedParameterElement>() .FirstOrDefault(gp => gp.GuidValue.Equals(targetParamGuid)); if (sharedParamElem == null) { TaskDialog.Show("提示", "未找到目标共享参数"); return; } // 获取原参数定义 ExternalDefinition originalDef = sharedParamElem.GetDefinition() as ExternalDefinition; if (originalDef == null) { TaskDialog.Show("提示", "无法获取参数定义"); return; } // 创建新定义选项,复制原属性并修改ShouldHideWhenNoValue ExternalDefinitionCreationOptions newDefOptions = new ExternalDefinitionCreationOptions(originalDef.Name, originalDef.ParameterType) { Description = originalDef.Description, GroupName = originalDef.GroupName, Visible = originalDef.Visible, ShouldHideWhenNoValue = !originalDef.ShouldHideWhenNoValue, // 切换原属性值,可直接设为true/false UserModifiable = originalDef.UserModifiable }; // 启动事务执行修改 using (Transaction trans = new Transaction(doc, "修改共享参数隐藏设置")) { if (trans.Start() == TransactionStatus.Started) { // 调用编辑方法更新定义 bool editSuccess = uiApp.Application.SharedParameters.EditExternalDefinition(originalDef, newDefOptions); if (editSuccess) { trans.Commit(); TaskDialog.Show("成功", "共享参数的ShouldHideWhenNoValue属性已修改"); } else { trans.RollBack(); TaskDialog.Show("失败", "修改共享参数定义失败"); } } } }
关键说明
- 事务必要性:所有修改Revit文档元素的操作必须在事务中执行,否则会触发API异常
- ExternalDefinition编辑限制:不能直接修改已存在的
ExternalDefinition实例,必须通过EditExternalDefinition方法,传入原定义和新选项完成更新 - 参数属性复制:创建新定义选项时,务必复制原参数的所有关键属性(名称、类型、分组等),避免意外修改其他参数设置
内容的提问来源于stack exchange,提问作者MrVoLaNd
相关产品推荐
相关产品推荐

