我试图在一个棱镜区域嵌入一个SketchFlow原型,我成功地获得了sketchflow播放器的视觉效果,但似乎没有加载Sketch.Flow数据。我在NavigationViewModel上看到了许多绑定异常。
我知道它可能不是官方支持的,但我希望在单个SketchFlow应用程序中托管多个SketchFlow,这样我就可以轻松地部署新的SketchFlow并显示我选择的任何一个。
发布于 2010-11-29 23:36:14
你的问题中没有提供足够的信息来确定,但我怀疑这与SketchFlow播放器如何找到Sketch.Flow数据文件有关。
如果您查看常规SketchFlow项目是如何构造的,就会发现您有一个主应用程序和一个包含项目屏幕的第二个程序集。在主应用的app.xaml.cs文件中,有一行如下所示:
组件: Microsoft.Expression.Prototyping.Services.SketchFlowLibraries("SilverlightPrototype1.Screens")
这一行定义了SketchFlow播放器将在何处查找它期望的数据。我还没有尝试过您正在做的事情,但可能需要在main或承载SketchFlow播放器的加载程序集上设置该属性。
请注意,这不是官方以任何方式支持,我只是试图帮助您找到一个解决方案。
发布于 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。
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错误。
https://stackoverflow.com/questions/4288455
复制相似问题