使用Silverlight 5.0,我在网格中有一组复选框,如下所示:
<Border Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,25,10,0" Background="LightGray" Opacity="0.7" >
<Grid Margin="5" >
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<CheckBox Grid.Row="0" Content="Item 1" Margin="0" />
<CheckBox Grid.Row="1" Content="Item 1A" Margin="20,0,0,0" />
<CheckBox Grid.Row="2" Content="Item 2" Margin="0" />
<CheckBox Grid.Row="3" Content="Item 2A" Margin="20,0,0,0" />
<CheckBox Grid.Row="4" Content="Item 2B" Margin="20,0,0,0" />
<CheckBox Grid.Row="5" Content="Item 3" Margin="0" />
</Grid>
</Border>
通过设置保证金,我得到了我想要的效果,即项目1A在项目1下缩进,项目2A和2B在项目2下缩进。
然而,这只是一个例子。这些项目还有很多,所以我宁愿使用某种Binding来解决这些问题。
我开始使用Name,IsSelected和Level(正常为0,缩进为20)和xaml这样的类:
<Border Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,25,10,0" Background="LightGray" Opacity="0.7" >
<data:DataGrid x:Name="LayerOptionsGrid" AutoGenerateColumns="False" HeadersVisibility="None">
<data:DataGrid.Columns>
<data:DataGridCheckBoxColumn Binding="{Binding IsSelected}" />
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl >
<ContentPresenter Content="{Binding Name}" Margin="{Binding Level}" />
</ContentControl>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
</Grid>
</Border>
我得到的是一个CheckBoxes和Names的网格,但不是太糟糕,但有两个主要问题:1)我没有Margin工作,所以没有缩进和2)Grid的工作方式,我必须单击复选框两次才能更改它(一次选择,我猜)。我正在寻找一种更好的方法来获得这个结果:
(Checkbox) Item 1
(Checkbox) Item 1A
(Checkbox) Item 2
(Checkbox) Item 2A
(Checkbox) Item 2B
等,这是我最初提供的暴力方法(虽然缺乏我需要的灵活性)。
注意:如果我提供一个名为Margin的Thickness属性并在ContentControl上添加Margin =“{Binding Margin}”,我会得到Text的缩进,但不会得到CheckBox的缩进。
我愿意接受任何选择。
答案 0 :(得分:0)
我在查看问题的点击选择部分时找到了答案:我用以下CellEditingTemplate替换了我的整个CellTemplate:
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<CheckBox Margin="{Binding Margin}" IsThreeState="False" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" Content="{Binding Name}" />
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>
我也删除了这行
<data:DataGridCheckBoxColumn Binding="{Binding IsSelected}" />
解决了这两个问题。