Files
HandyControl/Net35/HandyControl_Net35/Interactivity/DefaultTriggerAttribute.cs
T
2019-01-21 00:43:10 +08:00

49 lines
1.5 KiB
C#

using System;
using System.Collections;
using System.Globalization;
namespace HandyControl.Interactivity
{
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class, AllowMultiple = true)]
public sealed class DefaultTriggerAttribute : Attribute
{
private readonly object[] _parameters;
public DefaultTriggerAttribute(Type targetType, Type triggerType, object parameter) : this(targetType,
triggerType, new[] {parameter})
{
}
public DefaultTriggerAttribute(Type targetType, Type triggerType, params object[] parameters)
{
if (!typeof(TriggerBase).IsAssignableFrom(triggerType))
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture,
ExceptionStringTable.DefaultTriggerAttributeInvalidTriggerTypeSpecifiedExceptionMessage,
new object[] {triggerType.Name}));
TargetType = targetType;
TriggerType = triggerType;
_parameters = parameters;
}
public IEnumerable Parameters =>
_parameters;
public Type TargetType { get; }
public Type TriggerType { get; }
public TriggerBase Instantiate()
{
object obj2 = null;
try
{
obj2 = Activator.CreateInstance(TriggerType, _parameters);
}
catch
{
// ignored
}
return (TriggerBase) obj2;
}
}
}