我在Silverlight2中有一个ListBox,它使用Grid作为其ItemsPanelTemplate。在代码中,我如何获得对该Grid的引用?
<ItemsPanelTemplate x:Key="GridItemsPanel">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
<ListBox ItemsPanel="{StaticResource GridItemsPanel}" />
背景:
我想要做的是将网格添加到不是ListBoxItems的网格中。我试图获得类似于Outlook日历日视图的内容,其中项目可以在网格上对齐,分辨率为30分钟。我有网格和ListBoxItem定位正常工作,但我希望能够渲染背景颜色,网格线,小时标签等,以便用户清楚地看到ListBoxItems的时间和持续时间。
答案 0 :(得分:0)
如果你的目标是使用自定义渲染创建列表框,这是一个例子:
<ListBox x:Name="lstMails">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Background="Gray">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=Subject}" />
<TextBlock Grid.Column="1" Text="{Binding Path=Sender}" />
<TextBlock Grid.Column="2" Text="{Binding Path=SentTime}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
从后面的代码中设置ItemsSource
属性或通过指定binding:
lstMails.ItemsSource = /*collection of Mail objects*/;
希望,这很有帮助。
答案 1 :(得分:0)
如果您真的只想获得一个引用,无论名称范围如何,您都可以使用VisualTreeHelper来完成它。我使用自定义包装器做了一段时间
http://blogs.vertigo.com/personal/jimbg/Blog/archive/2008/10/24/walk-the-visual-tree.aspx
答案 2 :(得分:-1)
您需要为网格指定一个带有x:Name属性的名称:
http://msdn.microsoft.com/en-us/library/cc189028(VS.95).aspx