2010-11-23 71 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