WPF +符号在xaml中做什么

时间:2014-02-26 01:46:15

标签: c# wpf visual-studio-2010 xaml

我最近有一个非常有趣的场景,如果有人可以向我解释xaml中+的含义,如果它有任何东西,那就是徘徊。
注意:我使用的是VS2010
以下是我的datatemplate:

<DataTemplate DataType="{x:Type myViewModel}">
   <Border Style="{StaticResource CmyTheme}" 
             PreviewMouseDown="My_OnPreviewMouseDown" x:Name="myBorder">
            ...
        <ItemsControl Grid.Column="1"  HorizontalAlignment="Stretch" 
                      ItemsSource="{Binding Path=myList}" >
           <ItemsControl.ItemsPanel>
              <ItemsPanelTemplate>
                 <StackPanel Orientation="Vertical"  Name="myListSP" />
               </ItemsPanelTemplate>
           </ItemsControl.ItemsPanel>+
        </ItemsControl>
      </Grid>
    </StackPanel>
  </Border>
</DataTemplate>

正如您所看到的,</ItemsControl.ItemsPanel>标记是 + 符号,现在当代码编译时它从未抱怨过这个+符号所以我没有意识到它在那里。然后我的程序运行良好,直到需要使用DataTemplate然后我收到一个错误:当ItemsSource正在使用时,操作无效。使用ItemsControl.ItemsSource访问和修改元素
无论如何,我已经取消了+符号,一切正常。但是我很好奇编译器从不抱怨+的原因? +在xaml中有意义吗?

1 个答案:

答案 0 :(得分:1)

正如dlev所说,在你的情况下,+只是列表中与ItemsSource绑定冲突的项目。它也可以是任何其他字符,字符串或对象。

但是,XAML中的“+”符号有一个特殊的含义,虽然它与您的特定情况无关,但对于其他人来说,这对您来说可能很有意思。很高兴为您了解。

考虑嵌套的类结构,例如

public class Parent
{
    public Child Foo { get; set; }

    public class Child
    {
        public string Bar { get; set; }
    }
}

在WPF中,类型Parent.Child(C#)转换为Parent+Child(XAML),可以与{x:Type ...}一起使用。例如:

<DataTemplate DataType="{x:Type vm:Parent+Child}" />

只是为了完整,也许这对某些人来说很有意思......