1

Je comprends que le WorkflowDesigner peut recevoir un élément traîné de plusieurs façons, par exemple:Comment faire glisser et déposer une activité xaml sur un concepteur WF4 réhébergé?

  • En faisant glisser un élément de la boîte à outils et le laisser tomber sur le concepteur: une activité vide de ce type sera inséré sur la concepteur à l'emplacement de la goutte.
  • Vous pouvez également faire glisser une activité depuis le concepteur et la déposer à un autre emplacement dans le concepteur. L'activité déplacée sera également insérée à l'emplacement de dépôt.

Est-il possible que semblable à ces deux mécanismes glisser-déposer, je peux faire glisser une activité xaml au concepteur? Ce que j'ai à l'esprit est ceci,

Disons que vous avez un ListView contenant plusieurs fichiers xaml. Je veux pouvoir faire glisser l'un des éléments ListView (c'est-à-dire l'un des fichiers xaml), et quand je le fais glisser sur le concepteur, il fait comme si je glissais quelque chose de la boîte à outils (sauf l'activité sera fournie par le xaml). Je sais que je peux créer un environnement d'exécution Activity à partir du fichier en utilisant ActivityXamlServices.Load(filename), et je souhaite que cette activité soit insérée à l'emplacement de dépôt. Mais comment dire à l'application de comprendre cela quand je fais glisser et déposer?

Répondre

1

WorkflowDesigner designer Compte tenu, Activity activity, et faites glisser la source dataSource, utilisez ce code (crédits à tilovell)

ModelItem mi = designer.Context.Services.GetService<ModelTreeManager>() 
    .CreateModelItem(null, activity); 
DataObject data = new DataObject(DragDropHelper.ModelItemDataFormat, mi); 
DragDrop.DoDragDrop(dataSource, data, DragDropEffects.Copy); 

L'application passe en mode glisser-déposer. Le concepteur recevra la goutte en tant qu'activité.

+0

Alors, quelle est l'activité ici? Un type d'activité compilé, quelque chose chargé avec ActivityXamlServices ou quelque chose d'autre. Et si ce n'est pas une activité compilée, quel est le xaml généré lorsque vous sauvegardez le workflow? – Maurice

+0

quelque chose chargé avec ActivityXamlServices. –

+0

'Activity activity = ActivityXamlServices.Load (filename);' –

0

Vous ne pouvez pas faire cela car les activités ajoutées à un flux de travail doivent être compilées. Lorsque vous créez une activité XAML et que vous compilez votre projet dans VS2010, le type d'activité compilé résultant est ajouté à la boîte à outils et non une référence au fichier XAML que vous avez créé.

+0

êtes-vous sûr? Les activités runtime (non compilées) peuvent être ajoutées par exemple lors du collage ou du glisser-déposer d'une autre activité au concepteur. –

+0

en regardant [ce blogpost] (http://blogs.msdn.com/b/tilovell/archive/2010/01/06/freeform-custom-activity-designers-using-icompositeview-part-4.aspx) est-il possible de le faire en utilisant DragDrop.DoDragDrop? quel serait le DataObject? –

+0

Je fais référence au commentaire de Nick dans la section des commentaires –

Questions connexes