【发布时间】:2021-12-24 09:31:08
【问题描述】:
我是一名资深的 C# 程序员,但我对 WPF 和 XAML 完全陌生。我可以找到很多教程说“这是如何实现这个特定的事情”,而不是“这是为什么你这样做是为了实现这个特定的事情”。我很难理解 XAML 中各种语法的含义。
在这种情况下,属性中的大括号实际上是什么意思?它们在代码中被翻译成什么?我如何推理它们?它们是如何被解释的?为什么似乎有多种语法(Binding="{Binding someProperty}" vs Binding="{Binding path=someProperty}")?
我肯定遗漏了一些明显的东西,但我确实花了几天时间阅读教程,观看教程,甚至在极度枯燥和难以理解的 Microsoft documentation 中奋力拼搏,但我似乎仍然无法理解出去。
让我试着说明一下我卡在哪里了。
例如,假设我得到了这个:
int result = SomeUnknownFunction(42, 79);
我不必知道SomeUnknownFunction 做了什么来推断这里发生的事情。我可以说,好的,第一部分定义了一个int 类型的新变量,第二部分运行带有两个输入的某个函数,等号将该函数的结果分配给该变量。
现在说我得到了这个:
<TextBox Text="{Binding Name}">
我可以说,好的,当 XAML 解析器到达这一位时,它吐出的 C# 代码会创建一个 TextBox 类型的对象实例。该类具有(或继承)一个名为 Text 的属性,我们将其设置为……呃……花括号内的一些神奇语法……
这就是我卡住的地方。我认为其中的一部分被称为“标记扩展”(这是可能的最令人难以置信的通用和无意义的名称),但我什至无法弄清楚这是否意味着“花括号和里面的所有东西”或只是“绑定部分”。有时花括号内有等号,有时没有。有什么不同? Binding 这个词是……什么?它是一个函数吗?我们传入Name,它返回一个新的Binding 对象,该对象以某种方式分配给Binding 属性?
【问题讨论】:
-
@Dai 谢谢,但我不想具体了解绑定,我想了解大括号语法。这是“这是如何实现这个特定的事情” 的另一个实例,而没有解释为什么 那是如何实现那个特定的事情。另外为什么要在标题中加上“in XAML”?这就是标签的用途。
-
我编辑了您的标题,因为我的阅读内容是“C# 中的花括号是干什么用的?”这不是你要问的。
-
@Dai 好吧...不,我认为我并不真正关心 XAML 编译器的工作原理,我真的只想知道花括号的实际效果是什么。我想了解如何推断效果。我已经编辑了我的问题以澄清我的困惑。或者只是让它成为一个更糟糕的问题,我不确定。我在这里挣扎。
-
获取一份 Adam Nathan 的 WPF 书籍 (WPF Unleashed)。直到我读了第一章(?)我才开始真正了解 XAML