我有附加属性InteractionService.Triggers
,它是类型TriggersCollection
,它派生自List<ITrigger>
. 所以我在 XAML 中放入了一些触发对象,每个对象都实现了 interface ITrigger
。它工作正常,并且构建时没有任何错误。但是,当我将此库从 Silverlight 5 移植到 Windows Phone 8 并尝试将其用于上述场景时,Visual Studio 2012 用蓝线在此 XAML 下划线,并告知存在此类错误。当我编译项目时,错误从 VS2012 中的 XAML 消失,直到下次编辑此 XAML 文件。我该如何解决这个问题?或者这是带有 WP8 SDK 的 VS2012 的错误?这种情况有什么解决方法吗?
XAML 的片段(由 VS2012+WP8SDK 下划线,但不是由 VS2010+SL5 下划线):
<deToolkit:InteractionService.Triggers>
<deToolkit:EventTrigger EnterEvent="Loaded">
<deToolkit:CommandSetter Command="{Binding LoadCommand}" />
</deToolkit:EventTrigger>
</deToolkit:InteractionService.Triggers>
触发器集合:
public class TriggersCollection : List<ITrigger> { }
EventTrigger 类的头文件:
public class EventTrigger : TriggerBase
TriggerBase 类的头文件:
public class TriggerBase : DependencyObject, ITrigger
InteractionService 类的片段:
public sealed class InteractionService : DependencyObject
{
#region [ADP] Triggers : TriggersCollection (Triggers applied to control)
public static void SetTriggers(DependencyObject element, TriggersCollection value)
{
element.SetValue(TriggersProperty, value);
}
public static TriggersCollection GetTriggers(DependencyObject element)
{
var triggers = (TriggersCollection)element.GetValue(TriggersProperty);
if (triggers == null)
{
var collection = new TriggersCollection();
if (!DesignerProperties.IsInDesignTool)
{
// -- some code --
}
SetTriggers(element, collection);
return collection;
}
return triggers;
}
public static readonly DependencyProperty TriggersProperty =
DependencyProperty.RegisterAttached("Triggers", typeof(TriggersCollection), typeof(InteractionService), null);
#endregion Triggers
}
错误:
无法将“EventTrigger”类型的值添加到“TriggersCollection”类型的集合或字典中。
有时会引发另一个错误:
值“EventTrigger”不是“ITrigger”类型,不能在此通用集合中使用。参数名称:值