Предложения по замене устаревшего приложения VB6 / Flash на приложение WPF / Blend - PullRequest
0 голосов
/ 23 ноября 2010

У нас есть устаревшее приложение, которое использует 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 навсегда !!!

1 Ответ

0 голосов
/ 23 ноября 2010

Существует Manage Extensibility Framework, который является стандартным подходом для динамических модулей.

Во всяком случае, я не использовал его, поэтому я бы ответил на вопросы по-другому:

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;
...