繁体   English   中英

具有网格布局的自定义ItemsControl

[英]Custom ItemsControl with grid layout

我有用于显示数独游戏网格的自定义项控件。 我希望它显示其项目到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>

忽略这些值是因为这些单元格不是Grid的直接子级,它们被包装在由ItemsControlItemContainerGenerator创建的ContentPresenter

您需要使用ItemContainerStyle在更高级别应用这些值。

<ItemsControl.ItemContainerStyle>
    <Style TargetType="{x:Type ContentPresenter}">
        <Setter Property="Grid.Column" Value="{Binding X}" />
        <Setter Property="Grid.Row" Value="{Binding Y}" />
    </Style>
</ItemsControl.ItemContainerStyle>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM