1

我有一个使用 DataTemplate 显示员工的 ListBox - 它看起来与此屏幕截图非常相似。我希望能够单击员工照片,将其拖放到 ListBox 之外的某个位置。我怎样才能做到这一点?我不确定如何捕获图像的 PreviewMouseLeftButtonDown 事件,因为它位于 DataTemplate 中。

编辑:DataTemplate 位于一个单独的程序集中,拖放逻辑需要位于具有 ListBox 的窗口中。

Edit2:我认为这样做的正确方法是使用命令,对吗?

谢谢!

4

2 回答 2

2

您没有提到数据模板在哪里。我将尝试介绍两种非常相似的可能性。

如果用户控件的资源中有数据模板,则可以在用户控件的代码隐藏文件中设置事件。

<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 的帖子

希望有帮助。

于 2009-05-29T09:22:53.320 回答
1

您可以将 ElementDragBehavior(类似的东西)添加到数据模板中。

silverlight 工具包中的另一个选项(我不确定它是否存在于 WPF 中,但它存在于 Silverlight 中)您可以在 ListBox 上方添加它:

<toolkit:ListBoxDragDropTarget AllowDrop="True">

这使得列表中的每个项目都可以拖动到其他具有该项目的 ListBoxes 中

于 2011-01-16T01:46:27.067 回答