0

SketchFlow プロトタイプを PRISM 領域に埋め込もうとしています。Sketchflow プレーヤー ビジュアルのレンダリングには成功していますが、Sketch.Flow データがロードされていないようです。NavigationViewModel で多数のバインド例外が発生しています。

公式にサポートされていない可能性があることはわかっていますが、1 つの Silverlight アプリケーション内で複数の sketchflow をホストして、新しい SketchFlow XAP を簡単にデプロイし、選択したものを表示できるようにしたいと考えています。

4

2 に答える 2

0

あなたの質問には、確実に知るのに十分な情報が提供されていませんが、SketchFlow Player が Sketch.Flow データ ファイルを見つける方法に関係していると思われます。

通常の SketchFlow プロジェクトがどのように構成されているかを見ると、メイン アプリと、プロジェクトの画面を含む 2 つ目のアセンブリがあります。メイン アプリの app.xaml.cs ファイルには、次のような行があります。

[アセンブリ: Microsoft.Expression.Prototyping.Services.SketchFlowLibraries("SilverlightPrototype1.Screens")]

その行は、SketchFlow Player が期待するデータを探す場所を定義します。私はあなたがやっていることを試していませんが、その属性はおそらくあなたのメイン、またはSketchFlow Playerをホストする読み込みアセンブリに設定する必要があります.

これは正式にサポートされているわけではないことに注意してください。私はあなたのための解決策を見つけようとしているだけです.

于 2010-11-29T15:36:13.827 に答える
0

最初のステップは、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;

PlayerWindow を構築するだけでは十分ではありません。プレーヤ ウィンドウには、残念ながら CallingAssembly を使用して Sketch.Flow コンテンツを見つけてシリアル化解除するコードが含まれています。以下では、Microsoft PlayerWindow クラスで見つかったコードを変更して、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); }

逆シリアル化された Sketch.Flow コンテンツを取得したら、そのデータと他のビュー モデル、MiniFlowGraphViewModel、AnnotationViewModel、BrandingModel を使用して PlayerWindow の NavigationViewModel を再初期化し、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);

残念ながら、PLayerWindow の DesignTimeAnnotations プロパティは internal または private のように見えるため、更新方法がわかりません。

上記を実行すると、領域内に SketchFlow プレーヤーが表示され、現在「画面 1」にいることを示すナビゲーション ディスプレイが表示されます。ただし、メイン画面の表示領域には何も表示されず、左側のコントロール パネルは機能しません。NavigationViewModel、BrandinModel、FlowGraphModel でさまざまな BindingExpression エラーが発生します。

  • ズーム
  • ドッキング コントロール
  • 折りたたまれたコントロール
  • 共有インクストローク
  • 不可視性
  • インク編集モード
  • IsInkEditModeNone
  • IsMapOpen
  • IsFlowOverviewOpen
于 2010-11-30T22:36:22.960 に答える