【问题标题】:Suggestions for replacing legacy VB6/Flash application with WPF/Blend application用 WPF/Blend 应用程序替换旧版 VB6/Flash 应用程序的建议
【发布时间】:2010-11-24 04:30:53
【问题描述】:

我们有一个旧应用程序,它利用 VB6、Flash ActiveX 控件和 Flash 内容向用户显示动画电影。出于很多原因,我们希望摆脱这种情况。我希望有人能回答一些关于 WPF 的问题,以便我们决定如何最好地向前推进。

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

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

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

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

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

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

【问题讨论】:

    标签: wpf dynamic custom-controls storyboard


    【解决方案1】:

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

    反正我没用过,所以我换个方式回答问题:

    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;
    

    【讨论】:

    • 太棒了,谢谢。一个后续问题——当您说“您可以将故事板放入 Control.Resources”时,您的意思是我们会在 Blend 中这样做吗?或者以某种方式在 WPF 主机应用程序中以编程方式执行此操作?
    • 我现在还没有Blend,但是如果它把动画放在触发器里面,你可以把它复制粘贴到正确的地方。我的意思是,你可以只使用 XAML 来完成,而无需 C# 代码。
    • 关于上面 #2 的另一件事——现在我们的 Blend 自定义控件有四个情节提要,目前所有四个故事板在我加载自定义控件时都会自动启动。知道如何防止这种自动启动功能,这样我就可以手动启动四个中的一个(基于其他东西)。
    • 如果情节提要位于 集合中而没有来自其他控件的引用 - 它们将永远不会启动。除非我有代码,否则我不知道自动启动的原因。它可以是 EventTrigger(RoutedEvent="Control.Loaded"),也可以是函数的显式调用。
    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多