列表框水平对齐中网格中的复选框不起作用

本文关键字:复选框 不起作用 网格 中网 水平 对齐 列表 | 更新日期: 2023-09-27 18:20:27

我有一个DataGrid,其中我使用RowDetailsTemplate来显示所选DataGrid项目的详细信息。显示的信息有点像"SubItems",所以我使用带有TextBlock和两个CheckBox控件的ListBox来显示所有信息
控件使用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>

列表框水平对齐中网格中的复选框不起作用

由于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>

Grid.column只是用于分配总宽度,因此,当您将整个宽度指定为复选框的宽度时,在加载UI时,它占用了整个空间。