我在Silverlight2中有一个ListBox,它使用网格作为它的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。
发布于 2009-05-19 21:25:57
如果你的目标是创建自定义渲染的列表框,这里有一个例子:
<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
属性:
lstMails.ItemsSource = /*collection of Mail objects*/;
希望,这很有帮助。
发布于 2009-09-30 18:10:37
如果你真的只想获得一个引用,而不考虑namescope,你可以使用VisualTreeHelper遍历它。不久前,我使用一个定制的包装器完成了这项工作
http://blogs.vertigo.com/personal/jimbg/Blog/archive/2008/10/24/walk-the-visual-tree.aspx
发布于 2009-05-14 04:57:57
您需要使用x:Name属性为Grid命名:
http://msdn.microsoft.com/en-us/library/cc189028(VS.95).aspx
https://stackoverflow.com/questions/861615
复制相似问题