2010-11-26 3 views
0

J'essaie d'intégrer un prototype SketchFlow dans une région PRISM, je réussis à obtenir les visuels du lecteur sketchflow à afficher, mais il semble que les données Sketch.Flow ne sont pas chargées. Je vois un certain nombre d'exceptions de liaison sur le NavigationViewModel. Je sais qu'il n'est peut-être pas officiellement pris en charge, mais j'aimerais héberger plusieurs flux croisés dans une seule application Silverlight pour pouvoir déployer facilement de nouveaux SketchFlow XAP et afficher celui que je souhaite.lancer par programme sketchflow player

Répondre

0

Il n'y a pas assez d'informations fournies dans votre question pour être sûr, mais je suppose que cela a à voir avec la façon dont SketchFlow Player trouve le fichier de données Sketch.Flow.

Si vous examinez la structure d'un projet SketchFlow standard, vous disposez d'une application principale et d'un deuxième ensemble contenant les écrans du projet. Dans le fichier App.xaml.cs de l'application principale, il y a une ligne qui ressemble à ceci:

[montage: Microsoft.Expression.Prototyping.Services.SketchFlowLibraries ("SilverlightPrototype1.Screens")]

Cette ligne définit où le lecteur SketchFlow recherchera les données attendues. Je n'ai pas essayé ce que vous faites, mais cet attribut devra probablement être placé sur votre main, ou l'assembly de chargement qui héberge le lecteur SketchFlow.

S'il vous plaît noter que ce n'est pas officiellement pris en charge en aucune façon, j'essaie juste de vous aider à trouver une solution.

+0

Voir ma réponse ci-dessous ... Je fais tentative disponible beaucoup plus de détails sur la façon dont je suis en train de charger le lecteur SketchFlow dans la région. Je pense que je suis assez proche, mais je manque, probablement une partie des travaux internes que les ViewModels ou PlayerContext est en train de faire. – markti

0

La première étape consiste à construire une instance de PlayerWindow.

string targetTypeName = "Microsoft.Expression.Prototyping.Workspace.PlayerWindow, Microsoft.Expression.Prototyping.Runtime, Version=4.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"; var targetType = Type.GetType(targetTypeName); var view = container.Resolve(targetType) as PlayerWindow;

construire simplement un PlayerWindow ne suffit pas. La fenêtre du lecteur contient du code qui utilise malheureusement CallingAssembly pour localiser le contenu de Sketch.Flow et le dé-sérialiser. Ci-dessous j'ai modifié le code que j'ai trouvé dans la classe Microsoft PlayerWindow pour le faire pour utiliser un assembly spécifié au lieu de celui qui est dérivé de CallingAssembly.

string str = string.Format(CultureInfo.InvariantCulture, "/SilverlightPrototype1.Screens;Component/Sketch.Flow", new object[] { PlayerContext.Instance.LibraryName }); StreamResourceInfo resourceStream = Application.GetResourceStream(new Uri(str, UriKind.RelativeOrAbsolute)); if (resourceStream != null) { data = Serializer.Deserialize(resourceStream.Stream); }

Une fois que je reçois le contenu Sketch.Flow désérialisée en arrière, je pense que je dois ré-initialiser NavigationViewModel du PlayerWindow en utilisant ces données et les autres modèles de vue, MiniFlowGraphViewModel, AnnotationViewModel, BrandingModel, ainsi que la mise à jour DesignTimeAnnotations .

PlayerContext.Instance.RuntimeData = data; 
view.NavigationViewModel = new NavigationViewModel(data); 
view.MiniFlowGraphViewModel = new FlowGraphViewModel(); 
view.AnnotationViewModel = new AnnotationViewModel(view.NavigationViewModel, data.RuntimeOptions.DisableInking, data.RuntimeOptions.HideDesignTimeAnnotations); 
view.BrandingModel = new BrandingModel(data); 
PlayerContext.Instance.BrandingModel = new BrandingModel(data); 

Malheureusement, il semble que la DesignTimeAnnotations propriété sur PLayerWindow est interne ou privé, donc je ne sais pas comment je peux le mettre à jour. En faisant ce qui précède, vous obtiendrez un lecteur SketchFlow à l'intérieur de la région avec l'affichage de navigation indiquant que je suis actuellement sur "Écran 1". Cependant, la zone d'affichage de l'écran principal est vide et les panneaux de contrôle de gauche ne fonctionnent pas. Je reçois une variété d'erreurs BindingExpression sur NavigationViewModel, BrandinModel et FlowGraphModel.

  • Zoom
  • DockedControls
  • CollapsedControls
  • SharedInkStrokes
  • InkVisibility
  • InkEditingMode
  • IsInkEditModeNone
  • IsMapOpen
  • IsFlowOverviewOpen
Questions connexes