ListView中GridViewColumn的对齐控制

14

我有一个以下的 WPF ListView:

    <ListView Grid.Column="2" Grid.Row="1" Margin="0,53,12,6" 
Name="lvwProperties" 
ItemsSource="{Binding Path=SelectedPropertyItems, Mode=TwoWay}" 
Grid.ColumnSpan="2">

        <ListView.View >

                        <GridView>
                            <GridViewColumn Header="Property" DisplayMemberBinding="{Binding Path=PropertyName, Mode=TwoWay}" Width="130" />
                            <GridViewColumn Header="Is Mandatory" Width="90"  >

                                <GridViewColumn.CellTemplate>

                                    <DataTemplate>

                                        <CheckBox IsChecked="{Binding Path=IsMandatory, Mode=TwoWay}" HorizontalAlignment="Center" />

                                    </DataTemplate>

                                </GridViewColumn.CellTemplate>

                            </GridViewColumn>

                        </GridView>
                    </ListView.View>
                </ListView>

我想让复选框在第二个网格列中居中对齐。设置 HorizontalAlignment="Center" 似乎并没有奏效。如何在 XAML 中实现这一点?

1个回答

26
要在ListView中居中内容,您需要将ListView.ItemContainerStyle设置为Stretch的水平对齐方式,如下所示:
<ListView Grid.Column="2" Grid.Row="1" Margin="0,53,12,6" Name="lvwProperties"  
          ItemsSource="{Binding Path=SelectedPropertyItems, Mode=TwoWay}"  
          Grid.ColumnSpan="2"> 
    <ListView.ItemContainerStyle>
       <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
       </Style>
    </ListView.ItemContainerStyle>
    <ListView.View> 
        <GridView> 
            <GridViewColumn Header="Property" DisplayMemberBinding="{Binding Path=PropertyName, Mode=TwoWay}" Width="130" /> 
            <GridViewColumn Header="Is Mandatory" Width="90"  > 
               <GridViewColumn.CellTemplate> 
                   <DataTemplate> 
                       <CheckBox IsChecked="{Binding Path=IsMandatory, Mode=TwoWay}" HorizontalAlignment="Center" /> 
                   </DataTemplate> 
               </GridViewColumn.CellTemplate> 
            </GridViewColumn> 
        </GridView> 
    </ListView.View> 
</ListView> 

谢谢,这个很有效。但是为什么HorizontalContentAlignment设置为“Center”不起作用呢? - Gordon Slysz
4
@GordonSlysz 我认为发生的情况是在每个列中有一个“隐藏”的容器用于listview项目。 在复选框上设置“Center”确实使其居中显示在您看不到的容器内,但该容器对齐到左侧并自动调整大小以适应复选框周围。 因此,似乎您的复选框没有居中对齐。 将ListViewItem的HorizontalContentAlignment设置为Stretch会使此容器填充整个列,因此现在当您的复选框居中时,它看起来就像您期望的那样。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接