在制作用作拖放目标的自定义控件时,我需要将AllowDrop
属性设置为true
. 我最初使用以下代码,但发现该Drop
事件从未触发:
编辑器Visual.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 或默认样式设置它可以使一切正常工作......这让我感到困惑。为什么使用元数据覆盖不足以在自定义控件中接收拖放事件?
编辑:在 Windows 8 上使用 Visual Studio 2012 和 .Net 4.0 在任何 CPU 上进行测试 - 调试。