首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >这段MSDN示例代码做了什么?- ItemsControl.ItemTemplate

这段MSDN示例代码做了什么?- ItemsControl.ItemTemplate
EN

Stack Overflow用户
提问于 2009-06-22 21:49:32
回答 1查看 738关注 0票数 0

这是取自ItemsControl.ItemTemplate属性的MSDN library article的XAML代码示例:

代码语言:javascript
代码运行次数:0
运行
复制
<ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource myTodoList}}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=TaskName}" />
<TextBlock Text="{Binding Path=Description}"/>
<TextBlock Text="{Binding Path=Priority}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>  

我正在寻找这个例子中<StackPanel>元素用法的解释。

->

这个面板将存在于ListBox中的什么位置?

它在ItemTemplate中的作用是什么?

是否可以使用任何System.Windows.Controls.Panel来代替它,特别是网格?

如何使用<Grid>元素作为ListBox中每一项的模板?

这是我想要的概念:

http://img151.imageshack.us/img151/7960/graphconcept.png

我已经使用<Path>元素绘制了该图,没有任何问题。

我正在处理轴的标签,我正在尝试在ItemTemplate中使用<Grid>元素-但我不知道网格在这种情况下应该如何工作,并且MSDN在他们的示例代码中没有提到面板。

我的Y轴标签的XAML当前如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
<ListBox Background="Transparent" BorderThickness="0" ItemsSource="{Binding Path=GraphLabelYData}">
<ListBox.ItemTemplate>  
<DataTemplate>  
<Grid>  
<Grid.RowDefinitions>  
<RowDefinition Height="{Binding Path=GraphLabelSpacing}" />  
</Grid.RowDefinitions>  
<Grid.ColumnDefinitions>  
<ColumnDefinition Width="Auto" />  
<ColumnDefinition Width="{Binding ElementName=GraphLabelYData, Path=GraphLabelMarkerLength}" />  
</Grid.ColumnDefinitions>  
<TextBlock HorizontalAlignment="Right" VerticalAlignment="Bottom" Text="{Binding Path=GraphLabelTag}" />  
<Rectangle Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Stroke="Black" Fill="Black" />  
</Grid>  
</DataTemplate>  
</ListBox.ItemTemplate>  
</ListBox>  

这看起来正确吗?在运行时没有显示任何内容,但是在开始调试数据绑定和代码隐藏之前,我希望确保XAML建模正确。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-22 22:24:21

“这个面板将存在于listbox中的什么位置?”-列表框将为每个列表项创建一个副本,即为myTodoList集合中的每个元素创建一个副本。因此,在每个列表项中,您将有三个标签堆叠在一起。

“它在ItemTemplate中的用途是什么?”-使其可以为ItemsSource中的每个元素显示多个控件。就像WPF中的许多东西一样,ItemTemplate只能接受一个子元素,所以如果您想要多个子元素,则需要指定它们的布局方式,并通过添加面板(在本例中为StackPanel)来实现。

“可以使用任何System.Windows.Controls.Panel来代替它吗?特别是网格?”--当然可以。

“我该如何使用<Grid>元素作为ListBox中每一项的模板?”--就像你在其他任何地方使用网格一样。这也没什么不同,只是ItemsControl (及其后代,ListBox)将创建网格的多个实例。但请注意,在ItemTemplate中,您的DataContext将是当前列表项,因此您的{Binding}将相对于该列表项(除非您在ElementName中另行指定)。

“这个看起来正确吗?”-这个问题真的应该作为一个单独的问题发布,因为它与关于MSDN示例的问题无关,我甚至不确定您想要做什么。但我会尝试回答:我怀疑出了什么问题,因为您以两种不同的方式使用了名称"GraphLabelYData“。据我所知,在ColumnDefinition中,您将GraphLabelYData视为XAML元素的名称(即,您正在使用Name="GraphLabelYData"x:Name="GraphLabelYData"在window/page/UserControl中查找另一个控件,并读取该控件的GraphLabelMarkerLength属性);但在TextBlock中,您将GraphLabelYData视为当前集合项上的属性的名称。我怀疑其中一个是不对的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1029577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档