我有一个使用 DataTemplate 显示员工的 ListBox - 它看起来与此屏幕截图非常相似。我希望能够单击员工照片,将其拖放到 ListBox 之外的某个位置。我怎样才能做到这一点?我不确定如何捕获图像的 PreviewMouseLeftButtonDown 事件,因为它位于 DataTemplate 中。
编辑:DataTemplate 位于一个单独的程序集中,拖放逻辑需要位于具有 ListBox 的窗口中。
Edit2:我认为这样做的正确方法是使用命令,对吗?
谢谢!
我有一个使用 DataTemplate 显示员工的 ListBox - 它看起来与此屏幕截图非常相似。我希望能够单击员工照片,将其拖放到 ListBox 之外的某个位置。我怎样才能做到这一点?我不确定如何捕获图像的 PreviewMouseLeftButtonDown 事件,因为它位于 DataTemplate 中。
编辑:DataTemplate 位于一个单独的程序集中,拖放逻辑需要位于具有 ListBox 的窗口中。
Edit2:我认为这样做的正确方法是使用命令,对吗?
谢谢!
您没有提到数据模板在哪里。我将尝试介绍两种非常相似的可能性。
如果用户控件的资源中有数据模板,则可以在用户控件的代码隐藏文件中设置事件。
<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)
{
}
现在,如果您在资源字典中使用日期模板,那么您可以执行完全相同的操作,但您需要为资源字典创建一个代码隐藏文件。见这里。
对于拖放演练本身...请参阅 Jamie Rodriguez 的帖子。
希望有帮助。
您可以将 ElementDragBehavior(类似的东西)添加到数据模板中。
silverlight 工具包中的另一个选项(我不确定它是否存在于 WPF 中,但它存在于 Silverlight 中)您可以在 ListBox 上方添加它:
<toolkit:ListBoxDragDropTarget AllowDrop="True">
这使得列表中的每个项目都可以拖动到其他具有该项目的 ListBoxes 中