我有一个ListBox,显示员工使用DataTemplate - 它看起来非常类似于this screenshot。我希望能够点击员工照片,拖动它并将其放在ListBox之外的某个地方。我怎样才能做到这一点?我不知道如何捕获Image的PreviewMouseLeftButtonDown事件,因为它在DataTemplate中。
编辑:DataTemplate位于单独的程序集中,拖放逻辑需要位于具有ListBox的Window中。
Edit2:我认为这样做的正确方法是使用命令,我是对的吗?
谢谢!
答案 0 :(得分:2)
您没有提到数据模板的位置。我将尝试涵盖两种非常相似的可能性。
如果您在用户控件的资源中有datatemplate,则可以在代码隐藏文件中为用户控件设置事件。
<UserControl.Resources>
<DataTemplate DataType="{x:Type local:Staff}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}"/>
<Image Name="staffImage" PreviewMouseLeftButtonDown="staffImage_PreviewMouseLeftButtonDown"/>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
然后在UserControl.cs
中private void staffImage_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
}
现在,如果您在资源字典中使用datetemplate,那么您可以执行完全相同的操作,但您需要为资源字典创建一个代码隐藏文件。 See here
对于拖放演练本身......请参阅Jamie Rodriguez发表here。
希望有所帮助。
答案 1 :(得分:1)
您只需将ElementDragBehavior(类似的东西)添加到数据模板即可。
另一个选项(我不确定它是否存在于WPF中,但它确实存在于Silverlight中) 在silverlight工具包中,您可以在ListBox上方添加:
<toolkit:ListBoxDragDropTarget AllowDrop="True">
这使得列表中的每个项目都可以拖动到具有该
的其他ListBox中