Silverlight - 在给定的视觉效果中抓取元素的所有绑定信息?

时间:2009-12-24 12:02:55

标签: .net wpf visual-studio silverlight xaml

我们正在为运行时的一个元素(XamlReader.Load)加载一些xaml用于某些预览目的。不用多说,属性/绑定不知道,因为它们可以在我们加载的元素/控件之间变化。

由于运行时视图模型上下文在加载预览控件时不可用 - 加载元素后,想法是获取绑定信息,在运行时创建具有这些属性的类型,以指定相同的加载控件的数据上下文。

我们将使用AssemblyBuilder / ModuleBuilder / TypeBuilder在运行时构建一个类型。话虽如此,我们需要走可视树来识别所涉及的绑定,以创建绑定路径列表。

显然,一种方法是使用正则表达式直接解析xaml并构建此列表。只是想知道一种存在的方式,以便我可以从可视树本身获取绑定和相关路径?

由于

2 个答案:

答案 0 :(得分:0)

为什么不只是走Silverlight Visual Tree并为每个元素调用所有DP的GetBindingExpression()?

答案 1 :(得分:0)

您无法轻易地从可视树中枚举绑定本身。主要的showstopper是FrameworkElement没有提供枚举使用SetBinding方法应用的绑定的方法。

为了发现在FrameworkElement上设置的绑定,您需要发现可能已设置或未设置的可能DependencyProperties集,然后尝试使用GetBindingExpression检索每个DependencyProperties。要发现DependencyProperties集,需要在FrameworkElement的实际类型上使用一些反射代码。

更可能的替代方法是将XAML加载到XDocument中,然后可以使用一些LINQ来发现以"{Binding"开头的所有属性。但是,是的,这将是RegEx解析属性值的情况(除非你想做一些我甚至不会提到的真正疯狂的事情)。