0

我有HeaderedItemsControl哪个 ItemsSource 绑定到ObservableCollection<Person>. 我想显示它的内容,例如:

*姓名* Müller Schmid Weber
*名字* Peter Hans Willhelm
*年龄* 32 56 78
*国家*瑞士奥地利列支敦士登

到目前为止,我的 xaml 代码:

<HeaderedItemsControl ItemsSource="{Binding Path=PersonCollection}">
        <HeaderedItemsControl.Template>
            <ControlTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                     </Grid.RowDefinitions>
                    <TextBlock Grid.Column="0" Grid.Row="0" Text="Name"/>
                    <TextBlock Grid.Column="0" Grid.Row="1" Text="FirstName"/>
                    <TextBlock Grid.Column="0" Grid.Row="2" Text="Age"/>
                    <TextBlock Grid.Column="0" Grid.Row="3" Text="Country"/>
                    <StackPanel Grid.RowSpan="4" Grid.Column="1" Orientation="Horizontal">
                        <ItemsPresenter/>
                    </StackPanel>
                </Grid>
            </ControlTemplate>
        </HeaderedItemsControl.Template>
        <HeaderedItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical">
                    <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                    </Grid.RowDefinitions>
                        <Label Grid.Row="0" Content="{Binding Path=Name}" />
                        <Label Grid.Row="1" Content="{Binding Path=FirstName}" />
                        <Label Grid.Row="2" Content="{Binding Path=Age}" />
                        <Label Grid.Row="3" Content="{Binding Path=Country}"/>
                </StackPanel>
            </DataTemplate>
        </HeaderedItemsControl.ItemTemplate>
    </HeaderedItemsControl>

这给了我类似的东西:

*姓名* 穆勒
             施密德
             韦伯
*名字*彼得
             汉斯
             威廉
*年龄* 32
             56
             78
*国家*瑞士
             奥地利
             列支敦士登

有没有办法让项目在列中呈现?

4

2 回答 2

1

在您的 ControlTemplate 中,您将 ItemsPresenter 包装在 StackPanel 中,在这种情况下,它什么也不做,因为它只有一个子项:ItemsPresenter。您真正想要的是 ItemsPresenter 使用该 StackPanel 进行其内部布局,您可以使用 ItemsControl.ItemsPanel 为将托管控件生成的项目的面板定义模板来实现该布局:

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

您还需要将 ItemTemplate 中的 StackPanel 声明更改为 Grid,以便它将每个项目布置到 Rows 中。

于 2010-07-15T18:22:07.463 回答
0

看起来ItemTemplate您正在设置标签的行而不是列,因此您的内容将垂直堆叠。此外,您的标签处于StackPanel垂直方向,这将使它们显示在单列中。我猜你正在为你的ItemTemplate.

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition/>
    <ColumnDefinition/>
    <ColumnDefinition/>
    <ColumnDefinition/>
  </Grid.ColumnDefinitions>
  <Label Grid.Column="0" Content="{Binding Path=Name}" />
  <Label Grid.Column="1" Content="{Binding Path=FirstName}" />
  <Label Grid.Column="2" Content="{Binding Path=Age}" />
  <Label Grid.Column="3" Content="{Binding Path=Country}"/>
</Grid>
于 2010-07-15T14:49:46.060 回答