行为<t> AssociatedObject无法正常工作</t>

时间:2014-12-21 12:29:16

标签: wpf prism

我有一个使用

实现Behavior<FrameworkElement>的课程
protected override void OnAttached()
{
    base.OnAttached();
    AssociatedObject.AllowDrop = true;
    AssociatedObject.DragEnter += AssociatedObject_DragEnter;
    AssociatedObject.DragOver += AssociatedObject_DragOver;
    AssociatedObject.Drop += AssociatedObject_Drop;
}

在xaml我有

<Border Background="Turquoise">
<Grid Height="800" AllowDrop="True">
    <i:Interaction.Behaviors>
        <behaviors1:FrameworkElementDropBehavior></behaviors1:FrameworkElementDropBehavior>
    </i:Interaction.Behaviors>
...
</Grid>
</Border>

我已在FrameworkElementDropBehavior中定义Grid,我希望我可以在此Grid上删除相同的对象,因为AssociatedObject应该是整个Grid }}。但是发生的事情是我只允许放置在有元素定义的Grid的一部分上,例如蓝色,白色或值部分。我使用棱镜将整个green Grid注入TabControl。任何想法为什么我只能部分放弃? enter image description here

2 个答案:

答案 0 :(得分:1)

只需将Grid的背景属性设置为Transparent

<Grid Height="800" AllowDrop="True" Background="Transparent">
    <i:Interaction.Behaviors>
        <behaviors1:FrameworkElementDropBehavior/>
    </i:Interaction.Behaviors>
</Grid>

这样做,您可以在整个网格区域启用命中测试,包括没有子控件的任何空区域。

答案 1 :(得分:0)

我通过将FrameworkElementDropBehavior设置为Border来解决问题。

<Border Background="Turquoise">
    <i:Interaction.Behaviors>
        <behaviors1:FrameworkElementDropBehavior></behaviors1:FrameworkElementDropBehavior>
    </i:Interaction.Behaviors>
<Grid Height="800" AllowDrop="True">
...
</Grid>
</Border>