在创建ItemsControl时是否可以使用现有网格?

时间:2013-02-20 10:24:29

标签: c# .net wpf itemscontrol

我正在尝试创建一个布局,其中行数和列数都是动态的,如下所示:

Image http://s7.postimage.org/cdhay2c23/test.png

我希望将所有控件托管在一个网格中,以便我可以从上到下,从左到右进行Tab键工作。我试图开始工作的代码如下所示:

<Grid base:GridHelpers.RowCount="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=dx:DXWindow}, Path=Groups.Count}" Name="EnclosingGrid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="180" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <!--Labels-->
    <ItemsControl ItemsSource="{Binding Rows}" ItemsPanel="{Binding ElementName=EnclosingGrid}">
        <ItemsControl.ItemContainerStyle>
            <Style>
                <Setter Property="Grid.Row" Value="{Binding RowIndex}" />
            </Style>
        </ItemsControl.ItemContainerStyle>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Label Grid.Column="0" Content="{Binding Path=FieldName}" VerticalContentAlignment="Center" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    <!--Process fields-->
    <ItemsControl ItemsSource="{Binding Cells}" ItemsPanel="{Binding ElementName=EnclosingGrid}">
        <ItemsControl.ItemContainerStyle>
            <Style>
                <Setter Property="Grid.Row" Value="{Binding ParentRow.RowIndex}" />
                <Setter Property="Grid.Column" Value="{Binding ColumnIndex}" />
            </Style>
        </ItemsControl.ItemContainerStyle>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBox />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>

我已尝试将ItemsPanel属性设置为封闭网格,但不幸的是,这不起作用。

唯一的方法是将网格设置为ItemsPanelTemplate内的ItemsControl吗?

还有其他方法吗?或者我是否必须推出自己的ItemsControl

1 个答案:

答案 0 :(得分:0)

ItemsPanel 属性类型为 ItemsPanelTemplate ,因此您无法将此属性直接绑定到某个现有控件。

您可以将此属性视为一种工厂类,它应该为项目提供容器控制。 这就是MSDN字面上说的有关此类型的内容:指定 ItemsPresenter为ItemsControl项目的布局创建的面板。