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