2010-01-27 13 views
1

J'essaie de créer un look de fantaisie Listbox. ListBoxItem s sont censés se développer après avoir été sélectionnés, mais le problème est, ils sont également censés contenir un autre ListBox rempli de quelques détails sur un élément particulier et je n'ai aucune idée de comment y mettre des données. J'ai essayé à la fois d'y accéder à partir du code C# et de le lier en XAML, mais je ne suis toujours pas proche de la solution.WPF: insertion de données dans ListBox placé dans ListBoxItem

<UserControl.Resources>   
    <ResourceDictionary> 
    <DataTemplate x:Key="SelectedTemplate"> 
      <StackPanel Orientation="Vertical"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Path = Order}" Style="{StaticResource SampleListCellItem}" MinWidth="35"/> 
        <TextBlock Text="{Binding Path = FullName}" Style="{StaticResource SampleListCellItem}" Width="340"/>      
        <TextBlock Text="{Binding Path = FirstName}" Style="{StaticResource SampleListCellItem}" Width="200" /> 
        <TextBlock Text="{Binding Path = BirthDate, StringFormat = d}" Style="{StaticResource SampleListCellItem}" Width="100"/> 
       </StackPanel> 
       <StackPanel HorizontalAlignment="Right"> 
        <ListBox Name="InnerList" Height="200" Width="200"/> 
        <Button Name="Button1" Height="40" Width="100" Content="ButtonText" Visibility="Visible"/> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
     <DataTemplate x:Key="ItemTemplate"> 
      <StackPanel Orientation="Vertical"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Path = Order}" Style="{StaticResource SampleListCellItem}" MinWidth="35"/> 
        <TextBlock Text="{Binding Path = FullName}" Style="{StaticResource SampleListCellItem}" Width="340"/> 
        <TextBlock Text="{Binding Path = FirstName}" Style="{StaticResource SampleListCellItem}" Width="200" /> 
        <TextBlock Text="{Binding Path = BirthDate, StringFormat = d}" Style="{StaticResource SampleListCellItem}" Width="100"/> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 

     <Style TargetType="{x:Type ListBoxItem}" x:Key="ContainerStyle"> 
      <Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}"/> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="ContentTemplate" Value="{StaticResource SelectedTemplate}"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ResourceDictionary> 
</UserControl.Resources> 

Répondre

0

Dans votre article que vous voulez afficher, je suppose que vous avez une propriété qui est une liste (de T) ou un autre type qui est compatible avec une source d'items listbox normale. Laissez-le nommer ListPr pour l'exemple.

Dans votre modèle de données, ajoutez un contrôle listBox et définissez ItemsSource sur {Binding Path = ListPr}. Cela devrait fonctionner comme ça. Dans cette nouvelle zone de liste, vous pourrez définir un autre modèle de données, et ainsi de suite.

Comme il est mentionné dans un autre article, une arborescence pourrait être ce dont vous avez besoin dans ce cas.

Espérons que ça aide.

1

Il semble que ce que vous cherchez est un arbre. Je pense que le contrôle TreeView serait idéal pour ce que vous cherchez.

+0

Merci à vous deux pour une réponse et désolé pour le retard dans la réponse. La solution de David fonctionne comme un charme. Merci – Seldon