使用 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>
通过设置Margin,就得到了我想要的效果,就是Item 1A在Item 1下缩进,Item 2A和2B在Item 2下缩进。
然而,这只是一个示例。这些项目还有很多,所以我真的更愿意使用某种绑定来布置它们。
我从一个具有 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>
我得到的是一个复选框和名称的网格,还不错,但是有两个主要问题:1)我没有让 Margin 工作,所以没有缩进和 2)网格的工作方式,我必须单击复选框两次以更改它(我猜是选择一次)。我正在寻找一种更好的方法来获得这个结果:
(Checkbox) Item 1
(Checkbox) Item 1A
(Checkbox) Item 2
(Checkbox) Item 2A
(Checkbox) Item 2B
等等,这是我最初的蛮力方法提供的(尽管缺乏我需要的灵活性)。
注意:如果我提供一个名为 Margin 的厚度属性并在 ContentControl 上添加 Margin="{Binding Margin}" ,我会得到文本的缩进,而不是 CheckBox 的缩进。
我愿意接受任何选择。