【问题标题】:Markup Extensions, XAML's way of incorporating procedural programming?标记扩展,XAML 合并过程编程的方式?
【发布时间】:2012-01-04 03:50:46
【问题描述】:

可以说标记扩展是 XAML 整合过程编程的一种方式吗?您认为这种说法的局限性是什么?

例如,如果您将其与纯 XML 进行比较,则标记扩展在某种程度上就像“动作元素”,它们并不完全是对象树的一部分。

【问题讨论】:

    标签: wpf xaml markup declarative


    【解决方案1】:

    一些标记扩展只是一种更直接的方式来描述通过更广泛地使用标签可以完成的事情(因此它们的使用是声明式的):

    <TextBox Text="{Binding Path=Foo}">
    

    等价于

    <TextBox>
      <TextBox.Text>
       <Binding Path="Foo">
      </TextBox.Text>
    </TextBox>
    

    至于一般的扩展...见here。 {}-语法仅指示编译器使用相应扩展类型的实例来处理其间的代码。当然,这是面向对象的代码,而且从来都不是程序化的。信不信由你——即使是 M$ 的人也知道如何体面地编写代码!

    【讨论】:

      【解决方案2】:

      不,它纯粹是声明性的。这绝不是程序性的。

      【讨论】:

      • 但在幕后,标记扩展不是程序代码,还是我搞砸了?
      • 编译器(及其扩展)可以命令式地实现的方式,这不会使 XAML 标记本身成为命令式编程语言。你描述你的窗口是什么样子,它们有什么属性,资源字典中有什么项目,你从来没有写出如何窗口是如何绘制的,如何设置属性,如何将项目放置在资源字典。标记扩展只是一个扩展,你仍然在声明你正在使用它们,而不是它们应该如何实现。
      • 我明白你在说什么,我想的是如果你比较它纯 XML,标记扩展在某种程度上就像“动作元素”,它们不是对象树的一部分.
      猜你喜欢
      • 2016-08-24
      • 1970-01-01
      • 2017-05-10
      • 2012-02-01
      • 2016-08-13
      • 1970-01-01
      • 2012-03-02
      • 2012-01-08
      • 2012-01-15
      相关资源
      最近更新 更多