如何在GridViewColumn中居中WPF CheckBox?
<GridViewColumn Width="60" Header="Success">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=IsSuccess}">
</CheckBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
更新
此解决方案工作正常,但它破坏了细胞的Expression Dark主题...... (我不知道如何解决它......)
<ListView Name="HistoryTable" Width="783" VerticalAlignment="Stretch" VerticalContentAlignment="Top" Height="195">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
<ListView.Resources>
<Style TargetType="{x:Type CheckBox}" x:Key="DataGridCheckBox">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Margin" Value="4" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type GridViewColumn}},Path=ActualWidth}" />
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Filename}" Width="140" Header="{lex:LocTextExtension Key=Name, Dict=Resources, Assembly=PreShow.Player}" />
<GridViewColumn Width="60" Header="{lex:LocTextExtension Key=Success, Dict=Resources, Assembly=PreShow.Player}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<DockPanel HorizontalAlignment="Center">
<CheckBox IsChecked="{Binding Path=IsSuccess}" Style="{StaticResource DataGridCheckBox}">
</CheckBox>
</DockPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
答案 0 :(得分:7)
将新Grid的列宽(在DataTemplate中)绑定到GridView列宽的列宽。
<GridViewColumn Header="Header="{StaticResource CheckBoxHeaderText}" x:Name="CheckBoxColumn" Width="125">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid Width="{Binding ElementName=CheckBoxColumn, Path=Width}">
<CheckBox HorizontalAlignment="Center" IsChecked="{Binding IsCheckBoxChecked, Mode=OneWay}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
答案 1 :(得分:4)
这应该是赤裸裸的设置:
<ListView.Resources>
<!-- Alternatively use the ItemContainerStyle of course -->
<Style TargetType="ListViewItem" BasedOn="{StaticResource {x:Type ListViewItem}}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
<!-- Use BasedOn to preserve existing style -->
<Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</ListView.Resources>