51 lines
1.7 KiB
C#
51 lines
1.7 KiB
C#
// <copyright>
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
|
|
namespace Microsoft.Activities.Presentation.Xaml
|
|
{
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Reflection;
|
|
using System.Xaml.Schema;
|
|
|
|
internal class DefaultValueAttributeInfo : AttributeInfo<DefaultValueAttribute>
|
|
{
|
|
public override XamlTypeInvoker Invoker
|
|
{
|
|
get { return new DefaultValueAttributeInvoker(); }
|
|
}
|
|
|
|
public override ICollection GetConstructorArguments(DefaultValueAttribute attribute, ref ConstructorInfo constructor)
|
|
{
|
|
return new List<object>() { attribute.Value };
|
|
}
|
|
|
|
public override ConstructorInfo GetConstructor()
|
|
{
|
|
Type defaultValueAttributeType = typeof(DefaultValueAttribute);
|
|
ConstructorInfo constructor = defaultValueAttributeType.GetConstructor(new Type[] { typeof(object) });
|
|
SharedFx.Assert(constructor != null, "designerAttribute has a constructor that takes an argument of type System.Object.");
|
|
return constructor;
|
|
}
|
|
|
|
private class DefaultValueAttributeInvoker : XamlTypeInvoker
|
|
{
|
|
public override object CreateInstance(object[] arguments)
|
|
{
|
|
if (arguments != null && arguments.Length == 1)
|
|
{
|
|
// This helps to disambiguate the different constructors when arguments[0] is null.
|
|
return new DefaultValueAttribute(arguments[0]);
|
|
}
|
|
else
|
|
{
|
|
return base.CreateInstance(arguments);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|