2015-11-04 76 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的時間。