StackPanel内部网格-如何把它的元素在不同的列

本文关键字:元素 网格 内部 StackPanel | 更新日期: 2023-09-27 18:03:42

我的代码:

<Grid x:Name="SourceGrid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Grid.Column="0" Text="Headers" />
        <TextBlock Grid.Row="0" Grid.Column="1" Text="Tags" />

    <ItemsControl Grid.Row="1" Grid.ColumnSpan="2" ItemsSource="{Binding Path=AllHeaders.Fields}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding}" />
                    <ComboBox ItemsSource="{Binding ElementName=SourceGrid, Path=DataContext.Tags}" />
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>

正如你所看到的,我有一个TextBlock和一个ComboBox内部的DataTemplate,这是在一个StackPanel。我想做的是把TextBlock在列=0的我的网格,和一个ComboBox到列=1的我的网格。我该怎么做呢?网格。列属性在TextBlock和ComboBox中都不可访问。

StackPanel内部网格-如何把它的元素在不同的列

这是你的新布局:

<Grid x:Name="SourceGrid">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0"
                   Grid.Column="0"
                   Text="Headers" />
        <TextBlock Grid.Row="0"
                   Grid.Column="1"
                   Text="Tags" />
        <ItemsControl Grid.Row="1"
                      Grid.ColumnSpan="2"
                      ItemsSource="{Binding Path=AllHeaders.Fields}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid x:Name="SourceGrid">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding}"
                                   Grid.Column="0" />
                        <ComboBox ItemsSource="{Binding Path=DataContext.Tags, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid},AncestorLevel=2}}"
                                  Grid.Column="1" />
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>

  <Grid x:Name="SourceGrid">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0"
                   Grid.Column="0"
                   Text="Headers" />
        <TextBlock Grid.Row="0"
                   Grid.Column="1"
                   Text="Tags" />
        <ItemsControl Grid.Row="1"
                      Grid.ColumnSpan="2"
                      ItemsSource="{Binding Path=AllHeaders.Fields}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid x:Name="SourceGrid">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding}"
                                   Grid.Column="0" />
                        <ComboBox ItemsSource="{Binding Path=DataContext.Tags, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ItemsControl}}}"
                                  Grid.Column="1" />
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>