You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:51:19