Пользовательские ItemsControl с разметкой сетки - PullRequest
1 голос
/ 17 декабря 2011

У меня есть пользовательский контроль предметов для отображения игровой сетки судоку.Я хочу, чтобы он отображал свои элементы в сетке 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 Ответ

9 голосов
/ 17 декабря 2011

Значения игнорируются, поскольку ячейки не являются непосредственными потомками Grid, они заключены в ContentPresenter, созданный ItemContainerGenerator из ItemsControl.

применить значения на более высоком уровне, используя 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...