2009-05-14 9 views
2

Ich habe eine ListBox in Silverlight2, die ein Grid als ItemsPanelTemplate verwendet. Wie erhalte ich im Code einen Verweis auf dieses Raster?Wie bekomme ich einen Verweis auf ItemsPanel einer Silverlight ListBox

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

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

Hintergrund:

Was ich damit zu tun versuche, ist, Kinder zu dem Gitter hinzufügen, die nicht ListBoxItems sind. Ich versuche, eine ähnliche Ansicht wie die Outlook-Kalendertagansicht zu erhalten, in der Elemente in einem Raster mit einer Auflösung von 30 Minuten ausgerichtet werden können. Ich habe das Grid und die ListBoxItem-Positionierung funktioniert ordnungsgemäß, jedoch möchte ich Hintergrundfarben, Rasterlinien, Stundenbeschriftungen usw. wiedergeben können, damit der Benutzer die Zeit und die Dauer der ListBoxItems deutlich zu sehen.

+0

mit Es könnte helfen, wenn Sie skizziert, warum Sie wollen, vielleicht gibt es einen alternativen Ansatz. – AnthonyWJones

Antwort

-1

Sie müssen das Gitter einen Namen mit dem x geben: Name Attribut:

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

+0

Meinst du, gib dem Grid in der ItemsPanelTemplate ein x: Name? Wenn ich das tue, kann ich es nicht finden, indem ich FindName ("gridname") innerhalb der Unterklasse verwende. – geofftnz

+0

Ich denke, Sie müssen FindName auf dem bestimmten Listbox-Element aufrufen. –

+0

Das Grid ist das Itempanel, es sollte also nur eines für die gesamte Listbox geben. – geofftnz

0

Wenn Ihr Ziel ist hier listbox zu schaffen, mit benutzerdefinierten Rendering ist ein Beispiel:

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

Und setzen Sie ItemsSource Eigenschaft aus dem Code hinter oder durch Angabe der Bindung:

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

Hoffe, das war hilfreich.

+0

Danke, aber ich versuche, das Itempanel unabhängig von den Listenelementen zu stylen. Wenn Sie an den Kalender in Outlook denken, haben Sie Hintergrundschattierungen und Gitterlinien hinter den Kalendereinträgen. Das ist es wonach ich suche. – geofftnz

Verwandte Themen