自定义ItemsControl与网格布局

时间:2011-12-17 17:17:38

标签: c# .net wpf xaml data-binding

我有自定义itemscontrol用于显示数独游戏网格。我希望它将其项目显示为9X9网格。每个项目都有X和Y属性,我想绑定到网格中的属性位置(网格行和网格。列)。除了绑定这些grid.row和grid.column属性外,一切看起来都有效。代码如下。这不是绑定的错误,因为如果我使用硬值,则没有任何变化。请帮忙。:

<ItemsControl  Margin="4" ItemsSource="{Binding Cells, Mode=OneWay}" x:Name="grid">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
                <grid:GridCell Grid.Column="{Binding X}" Grid.Row="{Binding Y}"  />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
                <Grid IsItemsHost="True" Background="Pink">
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition Height="2" />
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition Height="2" />
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition Width="2" />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition Width="2" />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
            </Grid>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

编辑: 如果我使用例如

,则没有任何变化
<ItemsControl.ItemTemplate>
    <DataTemplate>
            <grid:GridCell Grid.Column="2" Grid.Row="2"  />
    </DataTemplate>
</ItemsControl.ItemTemplate>

1 个答案:

答案 0 :(得分:9)

这些值会被忽略,因为这些单元格不是Grid的直接子项,它们包含在由ContentPresenter的{​​{1}}创建的ItemContainerGenerator中。< / p>

您需要使用ItemsControl在更高级别应用值。

ItemContainerStyle