Question

Je suis en train de réhéberger le concepteur, mais chaque fois que je tape un flux de travail dans le concepteur:

_workflowDesigner = new WorkflowDesigner();
// added to UI here
Properties.Content = _workflowDesigner.PropertyInspectorView;
_workflowDesigner.Load(myWorkflowInstance);

myWorkflowInstance est un flux de travail défini dans un ensemble référencé. Je l'ai fait le Register magique pour obtenir les métadonnées d'activité par défaut enregistré:

new DesignerMetadata().Register();

et je me suis inscrit tous mes NativeActivities personnalisés:

public static void Register(IEnumerable<Type> activityTypes)
{            
    // activityTypes are all my custom NativeActivities
    // and all workflows (root of System.Activities.Activity)
    var builder = new AttributeTableBuilder();
    var attrGroups =
        from x in activityTypes
        from y in x.GetCustomAttributes(true).OfType<Attribute>()
        group y by x into g 
        select g;

    foreach (var typeGroup in attrGroups)
        builder.AddCustomAttributes(typeGroup.Key, typeGroup.ToArray());
    MetadataStore.AddAttributeTable(builder.CreateTable());
}

encore, quand je charge une activité dans le concepteur ce que je reçois:

Pourquoi r u sont effondrés?

Qu'est-ce que je manque ici?


Je pense qu'il a quelque chose à voir avec le fait que ces flux de travail sont compilés et existent uniquement dans la propriété de mise en œuvre d'une activité ...

Était-ce utile?

La solution

Votre instance de workflow enveloppé dans un ActivityBuilder?

Mise à jour: Enquête un peu plus je trouve ici une solution possible en utilisant les WorkflowInspectionServices.

var activities = WorkflowInspectionServices.GetActivities(new DemoWorkflow());
designer.Load(activities.First());

Autres conseils

Un peu de réflecteur et de réflexion m'a conduit à cette parodie:

var impl = (typeof(DemoWorkflow)
            .GetProperty("Implementation", 
                         BindingFlags.NonPublic | BindingFlags.Instance)
            .GetValue(new DemoWorkflow(), new object[0]) 
            as System.Func<System.Activities.Activity>)();

_workflowDesigner.Load(new ActivityBuilder { Implementation = impl });

Est-ce cela? Sérieusement? Je me sens malade sachant que je l'ai écrit cela. Sale.

J'ai remarqué dans le réflecteur que le XAML pour le flux de travail est en fait intégré dans l'ensemble dans un flux de ressources: le courant dans le réflecteur

mais toutes les tentatives d'utiliser ce échoué.

var target = typeof(DemoWorkflow);
var name = string.Format("{0}.obj.Debug.{1}.g.xaml", 
                         target.Assembly.GetName().Name, 
                         target.Name);
Activity derp = null;
using (var stream = assy.Assembly.GetManifestResourceStream(name))
{
    var reader = new XamlXmlReader(stream, new XamlSchemaContext());
    // throws an exception as the property Implementation is in the xaml;
    // it is protected and cannot be set, so deserialization blows up
    derp = ActivityXamlServices.Load(reader);
}

Je ne vois pas d'autre option à ce stade.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top