2009-05-14 3 views
2

J'ai un ListBox dans Silverlight2 qui utilise une Grille comme son ItemsPanelTemplate. Dans le code, comment puis-je obtenir une référence à cette grille?Comment obtenir une référence au ItemsPanel d'un ListBox Silverlight

<ItemsPanelTemplate x:Key="GridItemsPanel"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
    </Grid> 
</ItemsPanelTemplate> 

<ListBox ItemsPanel="{StaticResource GridItemsPanel}" /> 

Contexte:

Ce que je suis en train de faire avec c'est d'ajouter les enfants à la grille qui ne sont pas ListBoxItems. J'essaie d'obtenir quelque chose de similaire à la vue du jour du calendrier Outlook, où les éléments peuvent être alignés sur une grille avec une résolution de 30 minutes. J'ai la grille et le positionnement de ListBoxItem fonctionnant correctement, cependant j'aimerais pouvoir rendre des couleurs d'arrière-plan, des quadrillages, des étiquettes d'heure etc. pour permettre à l'utilisateur de voir clairement l'heure et la durée des ListBoxItems.

+0

Il pourrait aider si vous expliqué pourquoi vous voulez, peut-être il y a une autre approche. – AnthonyWJones

Répondre

-1

Vous devez donner la grille un nom avec l'attribut x: Nom:

http://msdn.microsoft.com/en-us/library/cc189028(VS.95).aspx

+0

Voulez-vous dire donner à la grille dans ItemsPanelTemplate un x: Name? Si je fais cela, je ne peux pas le trouver en utilisant FindName ("gridname") dans la liste déroulante sous-classée. – geofftnz

+0

Je pense que vous devez appeler FindName sur l'élément de la liste. –

+0

La grille est l'itemspanel, il ne devrait donc y en avoir qu'une pour toute la liste. – geofftnz

0

Si votre objectif est de créer listbox avec la coutume de rendre ici un exemple:

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

Et définir la propriété ItemsSource à partir du code derrière ou en spécifiant la liaison:

lstMails.ItemsSource = /*collection of Mail objects*/; 

J'espère que cela a été utile.

+0

Merci, mais ce que j'essaie de faire est de style le itemspanel indépendant des listitems. Si vous pensez au calendrier dans Outlook, vous avez un ombrage d'arrière-plan et un quadrillage derrière les entrées du calendrier. C'est ce que je suis après. – geofftnz

Questions connexes