WPF: вставка данных в ListBox, помещенный в ListBoxItem - PullRequest
1 голос
/ 27 января 2010

Я пытаюсь создать необычный вид Listbox. ListBoxItem s должны расширяться после выбора, но проблема в том, что они также должны содержать еще ListBox, заполненный некоторыми деталями о конкретном элементе, и я понятия не имею, как поместить в него некоторые данные. Я пробовал как получить доступ к нему из кода C #, так и связать его в XAML, но я все еще не нашел решения.

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

Ответы [ 2 ]

1 голос
/ 27 января 2010

Звучит так, будто вы ищете дерево. Я думаю, что TreeView идеально подойдет для того, что вы ищете.

0 голосов
/ 27 января 2010

В вашем элементе, который вы хотите отобразить, я предполагаю, что у вас есть свойство, представляющее собой список (из T) или другой тип, совместимый с обычным источником элементов списка. Для примера назовите его ListPr.

В шаблон данных добавьте элемент управления listBox и установите для ItemSource значение {Binding Path = ListPr}. Это должно работать просто так. В этом новом списке вы сможете определить другой шаблон данных и т. Д.

Как упоминалось в другом посте, в этом случае вам может понадобиться древовидная структура.

Надеюсь, это поможет.

...