2009-05-29 8 views
1

J'ai un ListBox affichant des employés avec un DataTemplate - il semble très similaire à this screenshot. Je veux être en mesure de cliquer sur la photo de l'employé, faites-la glisser et déposez-la quelque part hors de la ListBox. Comment puis je faire ça? Je ne suis pas sûr comment capturer l'événement PreviewMouseLeftButtonDown de l'image, car il est dans le DataTemplate.WPF - Faites glisser à partir de DataTemplate

Modifier: Le DataTemplate vit dans un assembly distinct et la logique de glisser/déplacer doit être dans la fenêtre qui a le contrôle ListBox. Edit2: Je pense que la bonne façon de faire est d'utiliser des commandes, ai-je raison?

Merci!

Répondre

2

Vous n'avez pas mentionné l'emplacement du modèle de données. Je vais essayer de couvrir 2 possibilités qui sont très similaires.

Si vous avez le datatemplate dans la ressource du contrôle utilisateur, vous pouvez configurer des événements dans le code derrière le fichier pour le contrôle utilisateur.

<UserControl.Resources> 
    <DataTemplate DataType="{x:Type local:Staff}"> 
     <StackPanel> 
     <TextBlock Text="{Binding Path=Name}"/> 
     <Image Name="staffImage" PreviewMouseLeftButtonDown="staffImage_PreviewMouseLeftButtonDown"/> 
     </StackPanel> 
    </DataTemplate> 
</UserControl.Resources> 

Puis, dans les UserControl.cs

private void staffImage_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 

} 

Maintenant, si vous le datetemplate dans un dictionnaire de ressources, alors vous pouvez faire exactement la même chose, mais vous devez créer un fichier code-behind pour le dictionnaire de ressources . See here. Pour le glisser-déposer par lui-même ... Voir Jamie Rodriguez post here.

Espérons que ça aide.

+0

Merci pour votre réponse, mais malheureusement, cela ne fonctionne pas pour moi. J'ai mis à jour la question concernant où le DataTemplate et le ListBox vivent. Je ne peux pas mettre de logique dans le DataTemplate comme vous le suggérez. Comme je le vois le DataTemplate dicte comment la vue devrait ressembler et pas ce qu'elle devrait faire. En outre, comme vous pouvez le voir dans mon explication, la vue vit dans un assembly avec un ListBox et d'autres choses que j'ai besoin de "déposer" l'objet déplacé, et le DataTemplate est dans un assembly séparé –

1

Vous pouvez simplement ajouter ElementDragBehavior (quelque chose comme ça) au modèle de données.

Une autre option (que je ne suis pas sûr qu'il existe dans WPF, mais il le fait dans Silverlight) dans la boîte à outils de silverlight vous pouvez ajouter ce au-dessus du ListBox:

<toolkit:ListBoxDragDropTarget AllowDrop="True"> 

ce qui rend chaque élément la liste peut être glissée dans d'autres ListBox qui ont cette

Questions connexes