2

我正在学习 WPF 的概念,例如数据绑定、命令、资源、元素绑定、样式等,它们广泛使用标记扩展,并且我在理解标记类背后的含义时遇到了问题,因为它们的使用超出了我知道它们应该用于。所以这里有几点我需要澄清:(所有代码片段都来自 C# 2010 书中的 Pro WPF)

  1. 静态扩展的含义和用途是什么?它可以用来声明静态资源,可以在 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 不允许我使用它。实现这一目标的正确方法是什么?

  2. Binding 的含义是什么(除了明显的含义,我绑定时发生了什么)?它用于资源绑定、数据或元素绑定。我能够理解元素绑定,但是绑定到不是元素的对象会导致问题。例如:

    <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},
    Path=Source}"></TextBlock>
    

    这里将文本绑定到 SystemFonts.IconFontFamily 属性,在这种情况下 x:static 的用途是什么,以及如何将它绑定到我创建的类中的属性?如果绑定目标的值发生变化,如何更新文本字段的文本属性?由于绑定,它应该自己更新,是这样吗?

    书中的所有示例都使用了 SystemFonts.IconFontFamily,我所见过的没有一个解释了这种绑定的使用,以及如何为我创建的类做这件事?在这方面需要一些帮助。我想问更多关于绑定的问题,但我会在一个单独的关于绑定的问题中这样做。

  3. 最后,推荐一本书或资源来解释正在发生的事情,而不是如何做这个和那个?

4

1 回答 1

3

答案......

1)

你说 ...


...这意味着如果我有一个具有静态属性的类,我应该能够使用这样的东西:

   <Button ... Foreground="{x:Static MyClass.SomeStaticProperty}" >

但它不起作用,尽管我创建了一个类,但我尝试使用 local:Static(指本地命名空间),但 VisualStudio 不允许我使用它。实现这一目标的正确方法是什么?


好吧,您的尝试是正确的,但是对于您将该名称空间令牌应用于哪个术语是不正确的...。local名称空间令牌适用于在其下声明的类,因此...

   <Button ... Foreground="{x:Static local:MyClass.SomeStaticProperty}" >

如果它SomeStaticProperty是有效的,应该可以正常工作Brush

在此示例中,整个标记在内部等效于Bindingas ...

   Binding.Source = {x:Type local:MyClass}
   Binding.Path = SomeStaticProperty.

2)

你有一个例子...


   <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},     
                             Path=Source}">
   </TextBlock>  

因此,使用示例 1 中的相同等价并将其应用于此示例...

    <TextBlock Text="{Binding Source={x:Type SystemFonts},     
                              Path=IconFontFamily.Source}">
    </TextBlock>  

3)

我从MSDN学到了这整件事……我认为我们不能有任何其他合法来源。

于 2011-10-14T05:10:50.440 回答