2011-10-13 31 views
2

我正在学习WPF的概念,例如数据绑定,命令,资源,元素绑定,样式等,它们广泛地使用标记扩展,并且我有问题了解背后的含义标记类,因为它们的使用超出了我理解它们应该使用的范围。因此,这里有几点我需要明确: (所有的代码片段都来自临WPF在C#2010本书)难以理解和使用xaml标记扩展

  1. 的含义是什么,并使用静态扩展?它可以用来 声明静态资源,可以声明为 ,但此XAML混淆了我:

    <Button ... Foreground="{x:Static SystemColors.ActiveCaptionBrush}" > 
    

    {X:静态SystemColors.ActiveCaptionBrush},什么是在这里静态角色 ,以及如果我在这里使用x:Dynamic,会发生什么变化?该 书上说这XAML相当于这个隐藏代码:

    cmdAnswer.Foreground = SystemColors.ActiveCaptionBrush;

    这意味着,如果我有静态属性的类,我应该 能够使用这样的事情:

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

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

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

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

    这是有约束力的文本到SystemFonts.IconFontFamily 财产,有什么用X:静态在这种情况下,如何将它绑定 的财产类我创造了什么?还有如何更新 文本属性的文本字段,如果绑定 目标的值发生变化?由于绑定,它应该自己更新,这是 的情况下?

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

  3. 最后,推荐一本书或资源,解释什么是 发生的事情,而不是如何做到这一点?

回答

3

答案....

1)

你说......


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

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

但它没有工作,尽管我创建了一个类,我尝试使用 地方:静态(指本地命名空间),但VisualStudio的 没有让我使用它。这是什么实现 的正确方法?


嗯,你的审判的尝试是正确的,但它是不正确的,你已经应用了哪些术语,命名空间令牌.... local命名空间令牌适用于下它宣布这样的类...

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

只要SomeStaticProperty是有效的Brush就应该工作得很好。

在这个例子中,整个标记为内部相当于Binding为...

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了解到这件事......我不认为我们可以比任何其他合法来源。

+0

感谢您的回答! – SpeedBirdNine