2010-11-23 4 views
0

Wir haben eine Legacy-Anwendung, die VB6, das Flash ActiveX-Steuerelement und Flash-Inhalt verwendet, um animierte Filme für Benutzer anzuzeigen. Aus vielen Gründen versuchen wir, davon wegzukommen. Ich hoffe, dass jemand da draußen ein paar Fragen zu WPF beantworten kann, damit wir eine Entscheidung treffen können, wie wir am besten voran kommen.Vorschläge zum Ersetzen der älteren VB6/Flash-Anwendung durch WPF/Blend-Anwendung

Zunächst ein wenig über unsere aktuelle Architektur und Bedürfnisse. Der Flash-Inhalt wird als separate SWF-Datei eingerichtet, wobei jede einzelne SWF ein Trainingsmodul mit animierten Inhalten darstellt. Wir haben Hunderte dieser Module. Benutzer führen diese Software getrennt aus, wobei der lokale Computer möglicherweise ALLE dieser SWF-Dateien enthält. Die aktuelle Anwendung bietet dem Benutzer die Möglichkeit, die SWF-Module nach Bedarf herunterzuladen.

So denken wir über die Einrichtung einer neuen Lösung mit WPF und Blend nach. Wir haben eine WPF-Host-Anwendung geschrieben, die Blend-Inhalte basierend auf dem Drücken von Schaltflächen oder was auch immer dynamisch anzeigen kann. Und wir haben einige Testmodule in Blend als benutzerdefinierte WPF-Steuerelemente erstellt. Aber es gibt drei bohrende Fragen:

  1. Im Moment haben wir die benutzerdefinierten Steuerelemente innerhalb der Haupt WPF-Lösung, aber wir müssen diese getrennt machen. Ich habe einige Dinge über die Verwendung von Application.LoadComponent gelesen, aber ich weiß nicht, ob das für unsere Lösung funktioniert.

  2. Jedes der benutzerdefinierten Blend-Steuerelemente enthält ein oder mehrere Storyboards, die die Animation steuern. Sobald ich einem Container in der WPF-App eines der benutzerdefinierten Steuerelemente hinzufüge, beginnen ALLE Storyboards automatisch zu "spielen". Wie kann ich es programmatisch so einrichten, dass ich bestimmte Storyboards nach Bedarf starten/stoppen kann?

  3. Angenommen, ich möchte eine Textbeschriftung in einem der benutzerdefinierten Steuerelemente ändern. Wenn ich das benutzerdefinierte Steuerelement dynamisch lade, wie würde ich auf eine der Textbeschriftungen zugreifen, um eine solche Änderung vorzunehmen?

Alle Tipps würden sehr geschätzt werden. Loving WPF so weit und hoffe, wir können diese Arbeit machen und für immer auf Wiedersehen zu sagen Flash für immer !!!

Antwort

0

Es gibt Manage Extensibility Framework, das ist ein Standardansatz für dynamische Module.

Wie dem auch sei, ich habe es nicht verwendet wird, so würde ich die Fragen anderer Art und Weise beantworten:

1) Nein, Loadcomponent für XAML-Dateien ISED, während individuelle Steuerung von Code und XAML bestehen. Ich meine, das benutzerdefinierte Steuerelement, das Sie hinzufügen können, indem Sie Hinzufügen-> Neues Element-> Benutzerdefiniertes Steuerelement (WPF) hinzufügen. So sollten Sie etwas tun, mit Reflexion und Content:

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) Es ist nicht Tatsache. Sie können die Storyboards in Control.Resources einfügen und manuell starten.

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

3)

control.FindName("anyname") as TextBlock; 
+0

Das ist fantastisch, danke. Eine weitere Frage: Wenn Sie sagen: "Sie können die Storyboards in Control.Resources einfügen", meinen Sie, dass wir das in Blend tun würden? Oder machen Sie das irgendwie programmatisch in der WPF-Host-Anwendung? –

+0

Ich habe jetzt nicht Blend, aber wenn es Animation innerhalb Trigger, können Sie es kopieren und an der richtigen Stelle einfügen. Ich meine, Sie können es nur mit XAML ohne C# -Code tun. – vorrtex

+0

Eine weitere Sache auf # 2 oben - jetzt hat unser benutzerdefiniertes Blend-Steuerelement vier Storyboards und alle vier beginnen AUTOMATISCH, sobald ich das benutzerdefinierte Steuerelement lade. Irgendeine Idee, wie man diese Autostartfunktionalität verhindert, also kann ich manuell nur einen der vier starten (basierend auf etwas anderem). –