2009-12-24 61 views
1

爲了一些預覽的目的,我們正在爲運行時(XamlReader.Load)的某個元素加載一些xaml。無需多言,屬性/綁定不知道,因爲它們可以在我們正在加載的元素/控件之間變化。Silverlight - 抓取給定視覺元素中所有元素的綁定信息?

由於運行時視圖模型上下文在我們加載控件進行預覽時不可用 - 在加載元素之後,想法是獲取綁定信息,在運行時創建一個具有這些屬性的類型來分配相同的作爲加載控件的數據上下文。

我們將在運行時使用AssemblyBuilder/ModuleBuilder/TypeBuilder構建類型。話雖如此,我們需要走視覺樹來識別所涉及的綁定,以創建一個綁定路徑列表。

顯然,一種方法是使用正則表達式來直接解析xaml並構建這個列表。只是想知道一種方式,以便我可以從視覺樹本身獲取綁定和相關路徑?

感謝

+0

我經常看到包含在silverlight問題中的wpf標籤,這個問題真的有一個wpf組件嗎? – AnthonyWJones 2009-12-24 12:26:53

回答

0

爲什麼不走這一切的DPS Silverlight的視覺樹對於每個元素調用GetBindingExpression()?

+0

一個開發者的「簡單」是另一個開發者的「嚮往!」。 – AnthonyWJones 2009-12-24 12:43:09

+0

完美,謝謝 – amazedsaint 2009-12-24 12:43:59

0

你不能輕易地從可視化樹中枚舉綁定本身。主要showstopper是FrameworkElement沒有提供枚舉使用SetBinding方法應用的綁定的方法。

爲了發現在FrameworkElement上設置的綁定,您需要發現可能已設置或可能未設置的可能的DependencyProperties集合,然後嘗試使用GetBindingExpression來檢索每個可能的DependencyProperties。要發現一組DependencyProperties,需要在FrameworkElement的實際類型上使用一些反射代碼。

更可能的選擇是將XAML加載到XDocument中,然後可以使用某些LINQ來發現以"{Binding"開頭的所有屬性。但是,是的,這將是一個正則表達式來解析屬性值(除非你想做一些真正瘋狂的事情,我甚至不會提到)。