Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 以编程方式启动sketchflow播放器_Silverlight_Sketchflow - Fatal编程技术网

Silverlight 以编程方式启动sketchflow播放器

Silverlight 以编程方式启动sketchflow播放器,silverlight,sketchflow,Silverlight,Sketchflow,我正在尝试将SketchFlow原型嵌入棱柱体区域,我成功地获得了SketchFlow播放器的视觉效果,但似乎未加载Sketch.Flow数据。我在NavigationViewModel上看到许多绑定异常 我知道它可能不受官方支持,但我想在一个Silverlight应用程序中托管多个SketchFlow,这样我就可以轻松部署新的SketchFlow XAP并显示我选择的任何一个。在您的问题中没有提供足够的信息来确定,但我怀疑这与SketchFlow播放器如何查找Sketch.Flow数据文件有关

我正在尝试将SketchFlow原型嵌入棱柱体区域,我成功地获得了SketchFlow播放器的视觉效果,但似乎未加载Sketch.Flow数据。我在NavigationViewModel上看到许多绑定异常


我知道它可能不受官方支持,但我想在一个Silverlight应用程序中托管多个SketchFlow,这样我就可以轻松部署新的SketchFlow XAP并显示我选择的任何一个。在您的问题中没有提供足够的信息来确定,但我怀疑这与SketchFlow播放器如何查找Sketch.Flow数据文件有关

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

[程序集:Microsoft.Expression.Prototype.Services.SketchFlowLibraries(“SilverlightPrototype1.Screens”)]

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


请注意,这没有任何官方支持,我只是想帮您找到解决方案。

第一步是构造PlayerWindow的实例

string targetTypeName=“Microsoft.Expression.Prototyping.Workspace.PlayerWindow,Microsoft.Expression.Prototyping.Runtime,版本=4.0.5.0,区域性=中性,PublicKeyToken=31bf3856ad364e35”;
var targetType=Type.GetType(targetTypeName);
var view=container.Resolve(targetType)作为playerWindows

仅仅构建一个PlayerWindow是不够的。播放器窗口中有代码,不幸的是它使用CallingAssembly来定位Sketch.Flow内容并反序列化它。下面,我修改了在Microsoft PlayerWindow类中找到的代码,以便使用指定的程序集,而不是从CallingAssembly中派生的程序集

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

一旦我得到反序列化的Sketch.Flow内容,我想我需要使用该数据和其他视图模型、MiniFlowGraphViewModel、AnnotationViewModel、BrandingModel以及更新DesignTimeAnnotations重新初始化PlayerWindow的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错误

  • 变焦
  • 停靠控件
  • 折叠控件
  • 共享击数
  • 墨水可见度
  • InkEditingMode
  • 伊辛基二酮
  • 伊斯马蓬
  • FlowOverview打开了吗

请参见下面我尝试的答案……我提供了更多关于如何在该地区加载SketchFlow播放器的详细信息。我想我已经很接近了,但是我可能错过了ViewModels或PlayerContext正在做的一些内部工作。