使用WPF / Blend应用程序替换旧版VB6 / Flash应用程序的建议

时间:2010-11-23 16:35:51

标签: wpf dynamic custom-controls storyboard

我们有一个遗留应用程序,它利用VB6,Flash ActiveX控件和Flash内容向用户显示动画电影。出于很多原因,我们希望从中迁移出去。我希望有人可以回答一些关于WPF的问题,以便我们能够确定如何最好地向前发展。

首先,关于我们当前的架构和需求。 Flash内容设置为单独的SWF文件,其中每个SWF表示带有动画内容的培训模块。我们有数百个这样的模块。用户以断开连接的方式运行此软件,其本地计算机可能有也可能没有所有这些SWF文件。当前应用程序为用户提供了在需要时下载SWF模块的选项。

以下是我们如何考虑使用WPF和Blend设置新解决方案。我们编写了一个WPF主机应用程序,可以根据按钮或其他任何内容动态显示Blend内容。我们在Blend中创建了一些测试模块作为WPF自定义控件。但有三个棘手的问题:

  1. 现在我们在主WPF解决方案中有自定义控件,但我们需要将它们断开连接。我已经阅读了几个关于使用Application.LoadComponent的内容,但我不知道这是否适用于我们的解决方案。

  2. 每个Blend自定义控件都包含一个或多个控制动画的故事板。一旦我将一个自定义控件添加到WPF应用程序中的容器,所有故事板就会自动开始“播放”。我如何以编程方式制作它以便根据需要启动/停止某些故事板?

  3. 假设我要在其中一个自定义控件中更改文本标签。如果我们动态加载自定义控件,如何访问其中一个文本标签以进行此类更改?

  4. 任何提示将不胜感激。到目前为止爱WPF,并希望我们能够完成这项工作并永远告别Flash !!!

1 个答案:

答案 0 :(得分:0)

有管理扩展性框架,这是动态模块的标准方法。

无论如何,我还没有用过它,所以我会以其他方式回答这些问题:

1)不,LoadComponent用于xaml文件,而自定义控件由代码和xaml组成。我的意思是,您可以使用Add-> New Item-> Custom Control(WPF)添加自定义控件。所以你应该做这样的事情,使用反射和ContentControl:

Assembly asm = Assembly.LoadFile(@"C:\SomeLibrary.dll"); 
Type type = asm.GetType("SomeNamespace.SomeControl"); 
var control = Activator.CreateInstance(type) as Control;
this.myContentControl.Content = control;

2)这不是事实。您可以将故事板放入Control.Resources并手动启动它们。

((Storyboard)control.Resources["myStoryboard"]).Begin(control);

3)

control.FindName("anyname") as TextBlock;