Wpf 拖动行为不适用于ItemsControl:MouseDragElementBehavior中的项

Wpf 拖动行为不适用于ItemsControl:MouseDragElementBehavior中的项,wpf,drag,itemscontrol,Wpf,Drag,Itemscontrol,我有一节课 public class DrawingCanvas : FrameworkElement 它使用MouseDragElementBehavior实现拖动 我想将DrawingCanva像Photoshop中的一个层一样相对于另一个层进行拖动 单独使用(图1中的XAML) do允许拖动,但当我将DrawingCanvas放入ItemsControl 并将itemsource绑定到项目集合,拖动不起作用。 (图2上的XAML) 我不明白为什么 第一种情况是以下XAML结构:

我有一节课

public class DrawingCanvas : FrameworkElement
它使用MouseDragElementBehavior实现拖动

我想将DrawingCanva像Photoshop中的一个层一样相对于另一个层进行拖动

单独使用(图1中的XAML)


do允许拖动,但当我将DrawingCanvas放入ItemsControl 并将itemsource绑定到项目集合,拖动不起作用。 (图2上的XAML)


我不明白为什么

第一种情况是以下XAML结构:

第二种情况是以下XAML结构:

更新:


我发现在第二种情况下,ItemsControl与该项相关的DrawingCanvas.Parent=null

。ItemsControls中的Parent始终为null

我在以下主题中找到了解决方案并进行了解释:

更新:

现在父级不是空的,问题仍然存在

更新2

最后缺少的东西 我必须在ContentPresenter中定义“扩展器:DragHelper.CanDrag”而不是

<ItemsControl.ItemTemplate>

生成的模板如下所示,因此问题得以解决:

<ItemsControl
    ItemsSource="{Binding Source={StaticResource Locator}, Path=LayersViewModel.Layers}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas IsItemsHost="True"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property=**"extenders:DragHelper.CanDrag"** Value="True"/>
            <Setter Property="Canvas.Left" Value="{Binding Path=X}" />
            <Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <surfaces:DrawingCanvas />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>


您能提供更多细节吗?您试图拖动的是
DrawingCanvas
中的项目,还是
DrawingCanvas
本身?您还可以提供您的
ItemsControl
的XAML吗?是的,我将用更多细节更新主题我发现在第二种情况下,ItemsControl DrawingCanvas.Parent=Null我可以问一下DragHelper来自哪里吗?我既没有在.NET4.5框架中也没有在Blend的行为SDK中找到它。DragHelper来自我的代码。在这里找到的stackoverflow@Dmitry你能提供DragHelper的代码吗?
<ItemsControl.ItemTemplate>
<ItemsControl
    ItemsSource="{Binding Source={StaticResource Locator}, Path=LayersViewModel.Layers}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas IsItemsHost="True"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property=**"extenders:DragHelper.CanDrag"** Value="True"/>
            <Setter Property="Canvas.Left" Value="{Binding Path=X}" />
            <Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <surfaces:DrawingCanvas />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>