ドラッグ アンド ドロップ ターゲットとして機能するカスタム コントロールを作成するときに、AllowDrop
プロパティをに設定する必要がありましたtrue
。Drop
最初に次のコードを使用しましたが、イベントがトリガーされないことがわかりました。
EditorVisual.cs
public class EditorVisual : Control
{
static EditorVisual()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(EditorVisual),
new FrameworkPropertyMetadata(typeof(EditorVisual)));
AllowDropProperty.OverrideMetadata(typeof(EditorVisual),
new FrameworkPropertyMetadata(true));
}
// ...
protected override void OnDrop(DragEventArgs e)
{
base.OnDrop(e);
// this is never called
}
}
テーマ/Generic.xaml
<Style TargetType="{x:Type local:EditorVisual}">
<Setter Property="Background" Value="LightGreen" />
<!-- Uncomment to make things work -->
<!-- <Setter Property="AllowDrop" Value="True" /> -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:EditorVisual}">
<Border Background="{TemplateBinding Background}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
AllowDrop
最終的に、プロパティを設定する方法に絞り込みました。xamlまたはデフォルトのスタイルで設定すると、すべてが適切に機能します...混乱します。カスタム コントロールでドラッグ アンド ドロップ イベントを受け取るには、メタデータ オーバーライドを使用するだけでは不十分なのはなぜですか?
編集:任意の CPU で .Net 4.0 を使用して Visual Studio 2012 を使用して Windows 8 でテスト済み - デバッグ。