代码之家  ›  专栏  ›  技术社区  ›  amazedsaint

Silverlight-获取给定视觉序列中元素的所有绑定信息?

  •  1
  • amazedsaint  · 技术社区  · 15 年前

    为了某些预览目的,我们在运行时为元素加载一些XAML(xamlreader.load)。不必说,属性/绑定并不知道,因为它们可以在我们正在加载的元素/控件之间变化。

    由于在加载控件进行预览时运行时视图模型上下文不可用,因此在加载元素之后,我们的想法是获取绑定信息,在运行时创建具有这些属性的类型,以分配与加载控件的数据上下文相同的内容。

    我们将使用assemblybuilder/modulebuilder/typebuilder在运行时构建一个类型。尽管如此,我们需要遍历可视化树来识别所涉及的绑定,并创建一个绑定路径列表。

    显然,一种方法是使用regex直接解析XAML并构建此列表。只想知道存在一种方法,这样我就可以从可视化树本身中获取绑定和相关路径?

    谢谢

    2 回复  |  直到 15 年前
        1
  •  0
  •   JustinAngel    15 年前

    为什么不直接浏览Silverlight可视化树,并为每个元素调用getBindingExpression()来获取所有的dps?

        2
  •  0
  •   AnthonyWJones    15 年前

    您不能轻易地从可视化树中枚举绑定本身。主要的阻碍因素是 FrameworkElement 不提供枚举已使用 SetBinding 方法。

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

    另一种更可能的选择是将XAML加载到xdocument中,然后可以使用一些Linq来发现以 "{Binding" . 但是是的,那么解析属性值将是regex的一个例子(除非您想做一些我甚至不会提到的非常疯狂的事情)。