1 .net c# data-binding wpf xaml
我有自定义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>
Run Code Online (Sandbox Code Playgroud)
编辑:如果我使用例如,没有任何改变
<ItemsControl.ItemTemplate>
<DataTemplate>
<grid:GridCell Grid.Column="2" Grid.Row="2" />
</DataTemplate>
</ItemsControl.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
这些值被忽略,因为单元格不是它们的直接子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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3828 次 |
| 最近记录: |