示例#1
0
        public void Test_GetShortTypeName()
        {
            const string aqtn = @"System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a";

            Assert.AreEqual(string.Empty, ReflectionMethods.GetShortTypeName(null));
            Assert.AreEqual(string.Empty, ReflectionMethods.GetShortTypeName(string.Empty));
            Assert.AreEqual("ClassName", ReflectionMethods.GetShortTypeName("ClassName"));
            Assert.AreEqual("ExceptionMessage", ReflectionMethods.GetShortTypeName("Namespace1.Namespace2.ExceptionMessage"));
            Assert.AreEqual("SqlMembershipProvider", ReflectionMethods.GetShortTypeName(aqtn));
        }
示例#2
0
        public static IEnumerable <AttachedPropertyInfo> GetAttachedProperties(BindableObject obj)
        {
            var apis = new List <AttachedPropertyInfo>();

            var dps = obj
                      .GetType()
                      .GetFields(BindingFlags.Static | BindingFlags.Public)
                      .Where(t => t.FieldType.IsAssignableFrom(typeof(BindableProperty)))
                      .ToArray();

            foreach (var dp in dps)
            {
                if (!dp.Name.EndsWith("Property", StringComparison.CurrentCultureIgnoreCase))
                {
                    continue;
                }

                var index     = dp.Name.LastIndexOf("Property", StringComparison.CurrentCultureIgnoreCase);
                var shortName = dp.Name.Substring(0, index);

                var getMethod = obj.GetType().GetMethod("Get" + shortName);
                var setMethod = obj.GetType().GetMethod("Set" + shortName);

                if (getMethod != null && setMethod != null)
                {
                    var typeName = ReflectionMethods.GetShortTypeName(obj.GetType().FullName);

                    var api = new AttachedPropertyInfo
                    {
                        PropertyName     = dp.Name,
                        XamlPropertyName = $"{typeName}.{shortName}",
                        Value            = getMethod.Invoke(null, new object[] { obj }),
                        Field            = dp,
                        GetMethod        = getMethod,
                        SetMethod        = setMethod,
                        Target           = obj
                    };

                    apis.Add(api);
                }
            }

            return(apis.ToArray());
        }