我正在学习 WPF 的概念,例如数据绑定、命令、资源、元素绑定、样式等,它们广泛使用标记扩展,并且我在理解标记类背后的含义时遇到了问题,因为它们的使用超出了我知道它们应该用于。所以这里有几点我需要澄清:(所有代码片段都来自 C# 2010 书中的 Pro WPF)
静态扩展的含义和用途是什么?它可以用来声明静态资源,可以在 as 中声明,但是这个 xaml 让我很困惑:
<Button ... Foreground="{x:Static SystemColors.ActiveCaptionBrush}" >
在{x:Static SystemColors.ActiveCaptionBrush}中,静态在这里的作用是什么,如果我在这里使用 x:Dynamic 会发生什么变化?这本书说这个 xaml 相当于这个代码隐藏:
cmdAnswer.Foreground = SystemColors.ActiveCaptionBrush;
这意味着如果我有一个具有静态属性的类,我应该能够使用这样的东西:
<Button ... Foreground="{x:Static MyClass.SomeStaticProperty}" >
但它不起作用,尽管我创建了一个类,但我尝试使用 local:Static (指本地命名空间),但 VisualStudio 不允许我使用它。实现这一目标的正确方法是什么?
Binding 的含义是什么(除了明显的含义,我绑定时发生了什么)?它用于资源绑定、数据或元素绑定。我能够理解元素绑定,但是绑定到不是元素的对象会导致问题。例如:
<TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily}, Path=Source}"></TextBlock>
这里将文本绑定到 SystemFonts.IconFontFamily 属性,在这种情况下 x:static 的用途是什么,以及如何将它绑定到我创建的类中的属性?如果绑定目标的值发生变化,如何更新文本字段的文本属性?由于绑定,它应该自己更新,是这样吗?
书中的所有示例都使用了 SystemFonts.IconFontFamily,我所见过的没有一个解释了这种绑定的使用,以及如何为我创建的类做这件事?在这方面需要一些帮助。我想问更多关于绑定的问题,但我会在一个单独的关于绑定的问题中这样做。
最后,推荐一本书或资源来解释正在发生的事情,而不是如何做这个和那个?