2010-11-23 84 views
0

我们有一个传统应用程序,它利用VB6,Flash ActiveX控件和Flash内容向用户显示动画电影。由于很多原因,我们正在寻求从此迁移。我希望有人可以回答关于WPF的几个问题,以便我们可以决定如何最好地继续前进。用WPF/Blend应用程序替换传统VB6/Flash应用程序的建议

首先,介绍一下我们当前的架构和需求。 Flash内容设置为单独的SWF文件,其中每个单独的SWF代表具有动画内容的培训模块。我们有数百个这些模块。用户以断开连接的方式运行此软件,其中本地机器可能包含或不包含所有这些SWF文件。当前的应用程序为用户提供了在需要时下载SWF模块的选项。

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

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

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

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

任何提示将不胜感激。爱WPF到目前为止,并希望我们能做到这一点,永远告别Flash!

回答

0

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

反正我没有用它,所以我会回答其他方式的问题:)

1号,LoadComponent是ISED的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; 
+0

这是太棒了,谢谢你。一个后续问题 - 当你说“你可以把故事板放到Control.Resources中”,你的意思是我们会在Blend中做到这一点?或者以某种方式在WPF主机应用程序中以编程方式执行该操作? – 2010-11-25 01:17:44