5

我有附加属性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”类型,不能在此通用集合中使用。参数名称:值

4

0 回答 0