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>