WPF 根据控件的Name属性通过反射获取该控件对象--代码

1.泛型代码示例

        /// <summary>
        /// 根据控件的Name获取控件对象
        /// </summary>
        /// <typeparam name="T">控件类型</typeparam>
        /// <param name="controlName">Name</param>
        /// <returns></returns>
        public T GetControlObject<T>( string controlName)
        {
            try
            {
                Type type = this.GetType();
                FieldInfo fieldInfo = type.GetField(controlName,                     
                System.Reflection.BindingFlags.NonPublic | 
                System.Reflection.BindingFlags.Instance |         
                System.Reflection.BindingFlags.IgnoreCase);
                if (fieldInfo != null)
                {
                    T obj = (T)fieldInfo.GetValue(this);
                    return obj;
                }
                else
                {
                    return default(T);
                }

            }
            catch (Exception)
            {
                return default(T);
            }
        }

2.实战代码

        public void Filter()
        {
            //hack20230407
            strPipeIDS = CommWithPCs.Instance.filterPipeID.ToString();
            char[] chars = strPipeIDS.ToCharArray();
            for (int i = 0; i < strPipeIDS.Length; i++)
            {
                arPipeID[i] = int.Parse(chars[i].ToString());
            }

            if (CommWithPCs.Instance.filterPipeID != 0)
            {
                for (int i = 1; i < 7; i++)
                {
                    if (i == arPipeID[0] || i == arPipeID[1] || i == arPipeID[2])
                    {
                        //string controlName =         
                        $"pipe{CommWithPCs.Instance.filterPipeID}";
                        string controlName = $"pipe{i}";
                        var controlModel = GetControlObject(controlName);
                        controlModel.Visibility = Visibility.Collapsed;
                    }
                }
            }

        }

        public DataGridTextColumn GetControlObject(string controlName)
        {
            try
            {
                Type type = this.GetType();
                System.Reflection.FieldInfo fieldInfo = type.GetField(controlName, 
                System.Reflection.BindingFlags.NonPublic | 
                System.Reflection.BindingFlags.Instance | 
                System.Reflection.BindingFlags.IgnoreCase);
                if (fieldInfo != null)
                {
                    DataGridTextColumn obj = (DataGridTextColumn)fieldInfo.GetValue(this);
                    return obj;
                }
                else
                {
                    return default(DataGridTextColumn);
                }
            }
            catch (Exception)
            {
                return default(DataGridTextColumn);
            }
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值