2015-11-04 39 views
0

我有DataGrid我正在使用RowDetailsTemplate来显示所选DataGrid项目的详细信息。显示的信息与“SubItems”类似,因此我使用ListBoxTextBlock和两个CheckBox控件来显示所有信息。
控件使用Grid进行定位,但我无法将CheckBox控件居中在Grid内。他们总是左对齐。
我在Stackoverflow上看到过类似的问题,但没有为我工作的几个问题。我如何将两个CheckBox控件集中到他们分配给的Grid.Column?这是我的XAML代码:列表框中的网格中的复选框水平对齐不起作用

<DataGrid.RowDetailsTemplate> 
<DataTemplate> 
    <ListBox Name="lbDependencyDetails" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Path=DependencyView, UpdateSourceTrigger=PropertyChanged}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid HorizontalAlignment="Stretch"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="55" /> 
         <ColumnDefinition Width="55" /> 
        </Grid.ColumnDefinitions> 
        <TextBlock Grid.Column="0" 
           Grid.ColumnSpan="2" 
           Text="{Binding Path=Dependency.SoftwareName}" 
           Margin="{Binding Path=Margin}" 
           HorizontalAlignment="Left" /> 

        <!--<GridSplitter HorizontalAlignment="Right" Grid.Column="1" Width="2" />--> 

        <CheckBox Grid.Column="2" 
           IsChecked="{Binding Path=Dependency.IsMarkedForReinstall, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
           HorizontalAlignment="Center" 
           IsEnabled="False" 
           Width="55" /> 
        <CheckBox Grid.Column="3" 
           IsChecked="{Binding Path=Dependency.IsMarkedForRepair, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
           HorizontalAlignment="Center" 
           IsEnabled="False" 
           Width="55" /> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</DataTemplate> 

回答

1

由于您ColumnDefinition已经设置列的宽度为55和呈现的复选框的宽度也是55因此将需要形成完整的空间。因此,请将ColumnDefinition更改为*或从复选框中删除宽度。

<DataGrid.RowDetailsTemplate> 
<DataTemplate> 
    <ListBox Name="lbDependencyDetails" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Path=DependencyView, UpdateSourceTrigger=PropertyChanged}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid HorizontalAlignment="Stretch"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 
        <TextBlock Grid.Column="0" 
           Grid.ColumnSpan="2" 
           Text="{Binding Path=Dependency.SoftwareName}" 
           Margin="{Binding Path=Margin}" 
           HorizontalAlignment="Left" /> 

        <!--<GridSplitter HorizontalAlignment="Right" Grid.Column="1" Width="2" />--> 

        <CheckBox Grid.Column="2" 
           IsChecked="{Binding Path=Dependency.IsMarkedForReinstall, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
           HorizontalAlignment="Center" 
           IsEnabled="False" 
           Width="55" /> 
        <CheckBox Grid.Column="3" 
           IsChecked="{Binding Path=Dependency.IsMarkedForRepair, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
           HorizontalAlignment="Center" 
           IsEnabled="False" 
           Width="55" /> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</DataTemplate> 
+0

就是这样!非常感谢!你能帮我理解一下这个问题吗?如果我将复选框的宽度设置为55,那么完整的空间是多少? Grid.Column? – sevi

1

Grid.column只是用于分配的总宽度,所以当你分配整个宽度的复选框的宽度,在加载它占去了整个空间的UI的时间。