2009-05-29 58 views
1

我有一个ListBox显示雇员与DataTemplate - 它看起来非常类似于this screenshot。我希望能够点击员工照片,将其拖放到列表框外的某处。我怎样才能做到这一点?我不知道如何捕获图像的PreviewMouseLeftButtonDown事件,因为它在DataTemplate中。WPF - 从DataTemplate内拖动

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

Edit2:我在想这样做的正确方法是使用命令,对不对?

谢谢!

回答

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) 
{ 

} 

现在,如果你在一个资源字典的datetemplate那么你可以做同样的事情,但你需要创建隐藏文件代码的资源字典。 See here

对于拖放漫游本身...请参阅Jamie Rodriguez的帖子here

希望有所帮助。

+0

感谢您的回答,但不幸的是它不适用于我。我已经更新了关于DataTemplate和ListBox在哪里的问题。按照您的建议,我无法将逻辑放入DataTemplate中。 正如我所看到的那样,DataTemplate规定视图应该是什么样子,而不是它应该做什么。另外,正如你在我的解释中看到的那样,视图存在于一个带有ListBox的组件中,还有其他一些我需要“拖放”拖动的对象的东西,而DataTemplate则放在一个单独的程序集中 – 2009-05-29 15:37:35

1

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

在Silverlight工具包,你可以添加此列表框上面的另一种选择(这我不知道它在WPF存在的,但它在Silverlight那样) :

<toolkit:ListBoxDragDropTarget AllowDrop="True"> 

这使得在每个项目列表拖动到其他列表框有