我正在使用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"
。可以请一些人解释一下这段代码在做什么?
答案 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>