首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式启动sketchflow player

以编程方式启动sketchflow player
EN

Stack Overflow用户
提问于 2010-11-27 04:49:16
回答 2查看 297关注 0票数 0

我试图在一个棱镜区域嵌入一个SketchFlow原型,我成功地获得了sketchflow播放器的视觉效果,但似乎没有加载Sketch.Flow数据。我在NavigationViewModel上看到了许多绑定异常。

我知道它可能不是官方支持的,但我希望在单个SketchFlow应用程序中托管多个SketchFlow,这样我就可以轻松地部署新的SketchFlow并显示我选择的任何一个。

EN

回答 2

Stack Overflow用户

发布于 2010-11-29 23:36:14

你的问题中没有提供足够的信息来确定,但我怀疑这与SketchFlow播放器如何找到Sketch.Flow数据文件有关。

如果您查看常规SketchFlow项目是如何构造的,就会发现您有一个主应用程序和一个包含项目屏幕的第二个程序集。在主应用的app.xaml.cs文件中,有一行如下所示:

组件: Microsoft.Expression.Prototyping.Services.SketchFlowLibraries("SilverlightPrototype1.Screens")

这一行定义了SketchFlow播放器将在何处查找它期望的数据。我还没有尝试过您正在做的事情,但可能需要在main或承载SketchFlow播放器的加载程序集上设置该属性。

请注意,这不是官方以任何方式支持,我只是试图帮助您找到一个解决方案。

票数 0
EN

Stack Overflow用户

发布于 2010-12-01 06:36:23

第一步是构造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内容并反序列化它。下面,我修改了我在微软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,以及更新DesignTimeAnnotations来重新初始化播放器窗口的NavigationViewModel。

代码语言:javascript
复制
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属性似乎要么是内部的,要么是私有的,所以我不确定如何更新它。

执行上述操作将使我在区域内获得一个SketchFlow播放器,并在导航显示上显示我当前在“屏幕1”上。但是,主屏幕显示区域为空白,左侧控制面板不起作用。我在NavigationViewModel,BrandinModel和FlowGraphModel上得到了各种各样的BindingExpression错误。

  • Zoom
  • DockedControls
  • CollapsedControls
  • SharedInkStrokes
  • InkVisibility
  • InkEditingMode
  • IsInkEditModeNone
  • IsMapOpen
  • IsFlowOverviewOpen
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4288455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档