如何获取Silverlight ListBox的ItemsPanel的引用

时间:2009-05-14 04:49:45

标签: silverlight listbox

我在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的时间和持续时间。

3 个答案:

答案 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