这两个绑定有什么 区别:
<ControlTemplate TargetType="{x:Type Button}"> <Border BorderBrush="{TemplateBinding Property=Background}"> <ContentPresenter /> </Border> </ControlTemplate>
和
<ControlTemplate TargetType="{x:Type Button}"> <Border BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}"> <ContentPresenter /> </Border> </ControlTemplate>
?
TemplateBinding 并不完全相同。MSDN 文档通常由必须对单音节 SDE 进行软件功能测试的人编写,因此细微差别不太正确。
TemplateBindings 在编译时根据控件模板中指定的类型进行评估。这允许更快地实例化已编译的模板。只需在模板绑定中摸索名称,您就会看到编译器会标记它。
绑定标记在运行时解析。虽然执行速度较慢,但绑定将解析在模板声明的类型上不可见的属性名称。慢一点,我会指出它是相对的,因为绑定操作占用应用程序的 CPU 很少。如果您正在高速爆破控制模板,您可能会注意到它。
在实践中,尽可能使用 TemplateBinding,但不要害怕 Binding。