Xaml代码说明

时间:2014-05-07 12:53:43

标签: c# silverlight xaml canvas grid

我正在使用silverlight处理c#xaml,我对这个xaml代码的层次结构感到困惑:

<UserControl.Resources>
    <this:MyValueConverter x:Key="TabConverter"/>
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="Green">
    <ItemsControl ItemsSource="{Binding Path=TabList, Mode=OneWay}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas></Canvas>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border Width="150" Background="red" Height="100"  Canvas.Left="{Binding TabList, Mode=TwoWay, Converter={StaticResource TabConverter}}"  Canvas.Top="100" />          
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>

当我运行它时会给出一个绿色的大窗口(对不起,如果技术名称不正确),而它也应该在同一窗口的某处显示红色Border Width="150" Background="red"。可以请一些人解释一下这段代码在做什么?

1 个答案:

答案 0 :(得分:1)

ItemsControl实际上只是绑定到一个列表,并为列表中的每个项应用一个datatemplate(带有背景红色的边框)。至于您只看到绿色的原因,那么您的viewmodel上的TabList属性中可能没有任何内容。这样,项目模板中的任何内容都不会呈现,您看到的只是绿色。

您需要确保TabList正确绑定(它存在于您的datacontext上,无论该视图是否为视图模型)并且其中包含项目。

这是您可能想要完成的更简单的版本:

<Grid x:Name="LayoutRoot" Background="Green">
    <ItemsControl ItemsSource="{Binding Path=TabList, Mode=OneWay}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border Width="150" Background="red" Height="100" />          
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>