0

使用 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 的缩进。

我愿意接受任何选择。

4

1 回答 1

0

我在查看问题的单击选择部分时找到了答案:我将整个 CellTemplate 替换为以下 CellEditingTemplate:

<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}" />

解决了这两个问题。

于 2012-08-28T21:14:44.487 回答