【问题标题】:difficulty understanding and using xaml markup extentions难以理解和使用 xaml 标记扩展
【发布时间】:2011-12-07 08:10:21
【问题描述】:

我正在学习 WPF 的概念,例如数据绑定、命令、资源、元素绑定、样式等,它们广泛使用标记扩展,但我在理解标记类背后的含义时遇到了问题,因为它们是使用超出我的理解他们应该被使用。所以这里有几点我需要明确: (所有代码 sn-ps 均来自 C# 2010 书中的 Pro WPF)

  1. 静态扩展的含义和用途是什么?它可以用来 声明静态资源,可以声明为 ,但是这个 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. 最后,推荐一本书或资源来解释什么是 发生,而不是如何做这做那?

【问题讨论】:

    标签: wpf xaml binding markup-extensions


    【解决方案1】:

    答案....

    1)

    你说...


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

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

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


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

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

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

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

       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 学到了这整件事...我认为我们不能有任何其他合法来源。

    【讨论】:

      猜你喜欢
      • 2012-02-01
      • 2016-08-13
      • 2011-03-11
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多