【问题标题】:Add Grid to ItemsPanelTemplate of an ItemsControl将网格添加到 ItemsControl 的 ItemsPanelTemplate
【发布时间】:2014-01-29 17:44:36
【问题描述】:

我想在 WPF 中将Grid 添加为ItemPanelTemplateItemsControl

我知道有很多类似的问题。但是到目前为止,我所看到的所有这些都在谈论动态添加行和列,并且他们并没有很好地涵盖它(在我看来)。

所以我想要的东西可能是最简单的形式但我不知道该怎么做。

我当然知道这行不通。但这只是为了展示我的想法。

<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
            </Grid>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock  Text="{Binding ArticleName}" Grid.Row="0" Grid.Column="0" />
            <TextBlock  Text="{Binding ArticleTradeName}" Grid.Row="0" Grid.Column="1" />
            <ListView Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3">
                .
                .
                .
            </ListView>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
-------------------------------------- | #1 名称 | #1 商品名称 | -------------------------------------- |网格视图 | |第 1 行 | |第 2 行 | | . | | . | |行 | -------------------------------------- | #2 名字 | #2 商品名称 | -------------------------------------- |网格视图 | |第 1 行 | |第 2 行 | | . | | . | |行 | -------------------------------------- ...

【问题讨论】:

  • 再看,你好像误会了ItemsPanelTemplate(为什么不把网格放在DataTemplate里面呢?)无论如何,不​​清楚你是哪种布局努力实现。
  • 你知道我有一个列表,我想以我有两个不同的 TextBox 绑定的方式绘制每个项目,并在它们下面绑定一个 GridView。
  • 我不太了解你。您可以模拟一个布局,例如我对您问题的编辑中的示例吗?
  • 我想要的是和你画的完全一样的布局。但不是'???'我想要一个我用 ListView 代替的 gridView
  • 好的,但是网格视图/列表视图中有什么?

标签: c# .net wpf itemscontrol


【解决方案1】:

无需更改 ItemsPanel 的默认值 (StackPanel)。只需将 Grid 放入 ItemTemplate 本身。像这样:

<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>                
                <TextBlock  Text="{Binding ArticleName}" Grid.Row="0" Grid.Column="0" />
                <TextBlock  Text="{Binding ArticleTradeName}" Grid.Row="0" Grid.Column="1" />
                <ListView ItemsSource="{Binding Samples}" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3">
                    <ListView.View>
                        <GridView>
                            .
                            .
                            .
                        <GridView>
                    </ListView.View>
                </ListView>
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

【讨论】:

  • 哦,我想现在我明白了ItemPanelTempate的用法了。它的默认值是 StackPanle?!如果我想改变项目的排列方式,我必须改变它的 PanelTemplate。我错过了这个重要的一点。非常感谢您的好意。
  • @MehrdadKamelzadeh 另见Grid.IsSharedSizeScope。如果您在ItemsControl 上设置Grid.IsSharedSizeScope="True" 并将SharedSizeGroups 添加到您的项目模板的列定义中,则所有列都会对齐。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多