から派生したInteractionService.Triggers
タイプのプロパティを添付しました。そこで、いくつかのトリガー オブジェクトを XAML に入れ、それぞれに interface を実装します。正常に動作し、エラーなしでビルドされました。しかし、このライブラリを Silverlight 5 から Windows Phone 8 に移植し、上記のシナリオで使用しようとすると、Visual Studio 2012 はこの XAML に青い線で下線を付け、そのようなエラーがあることを通知します。プロジェクトをコンパイルすると、この XAML ファイルを次に編集するまで、VS2012 の XAML からエラーが消えます。この問題を解決するにはどうすればよいですか? または、これは WP8 SDK を使用した VS2012 のバグですか? この場合の回避策はありますか?TriggersCollection
List<ITrigger>
ITrigger
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" 型ではないため、この汎用コレクションでは使用できません。パラメータ名: 値