在ListView ItemTemplate中使用ItemsControl和XAML

时间:2017-08-15 16:51:45

标签: c# wpf xaml listview itemtemplate

所以,有点疯狂的请求。我需要一个项目列表,我计划使用ListView,但在每个元素中,我需要另一个" List"可以说是水平扩展。

以下是我想要的基本想法的粗略图:

Crude Drawing of desired look 对于我的代码,这是我尝试过的,但它不起作用。 (是的,我故意不使用绑定,所以我可以使用设计视图来使一切看起来正确)

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid Grid.IsSharedSizeScope="True">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" SharedSizeGroup="KpiColumn0" />
                                <ColumnDefinition Width="Auto" SharedSizeGroup="KpiColumn1" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>

                            <StackPanel Orientation="Vertical" Grid.Row="0" Grid.Column="0">
                                <TextBlock Text="Test" />
                                <TextBlock Text="Test" FontSize="8" Margin="0,-4,0,0" />
                            </StackPanel>

                            <TextBlock Grid.Row="0" Grid.Column="2" Text="Test" />
                            <TextBlock Grid.Row="1" Grid.Column="0" Text="Test" />
                            <TextBlock Grid.Row="1" Grid.Column="2" Text="Test" />
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    </ListView.ItemTemplate>
    <ListView.Items>
        <MenuItem />
    </ListView.Items>
</ListView>

如何使用ListView来保存每个项目中的项目列表,这些项目会根据List中每个ListItem所包含的元素数量水平扩展绑定?

1 个答案:

答案 0 :(得分:1)

将此项添加到内部ItemsControl,项目将以水平对齐方式显示。

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

请注意,您无法使用设计器视图。您需要删除自己拥有的ListView.Items,而是使用绑定或代码隐藏功能让它在运行时显示。

如果你给ListView Name LV LV.ItemsSource = new List<List<int>> { new List<int> {1,2,3,4, }, new List<int> {1,2,3,4, } }; ,那么这样的话应该有效:

Foo = type("Foo", (), {k: 0 for k in ("tx", "ty", "tz")})