【问题标题】:Centering a checkbox in a GridViewColumn?在 GridViewColumn 中将复选框居中?
【发布时间】:2012-02-09 18:18:12
【问题描述】:

我目前正在努力让我的CheckBoxes 在我的GridViewColumns 中正确居中。

我为我的CheckBoxes 定义了一个Style,如下所示:

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

我的CheckBoxes 使用DataTemplate 添加到GridViewColumn 中,如下所示:

<GridViewColumn Header="Comment">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <CheckBox Style="{StaticResource DataGridCheckBox}" IsChecked="{Binding PropertyItem.Comment, Converter={StaticResource booleanConverter}, ConverterParameter='string'}"/>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

但我遇到的问题是 CheckBoxes 保持左对齐(即使在调整列大小时)。

有什么想法吗?

提前致谢,
桑尼

编辑:我一直在空白窗口中处理CheckBox,我认为问题可能与CheckBoxcontrol 有关。如果我制作了一个非常宽的CheckBox,我似乎仍然无法让它的CheckBox部分与自身对齐。它总是想去左上角。根据名称,ContentAlignment 属性似乎只对齐内容。

【问题讨论】:

  • 如果你移动 CheckBox 的 Horizo​​ntalAlignment="Center" 属性并且不使用 Style 会发生什么,同样的问题?
  • 是的。同样的问题。对齐属性似乎没有任何区别,但我知道正在应用模板,因为复选框已正确启用并且属性在设计时看起来正确。
  • 你有没有想过如何将样式应用到复选框列?我很想知道怎么做。

标签: wpf data-binding styles


【解决方案1】:

尝试将 ListViewItem 的 Horizo​​ntalContentAlignment 设置为 Stretch

<ListView ...>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    <ListView.ItemContainerStyle>
    <!-- ... -->
</ListView>

更新

这是一个仅以 Xaml 为中心的 CheckBox 示例。粘贴并尝试一下:)

<Grid>
    <ListView>
        <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 Header="Comment">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox Style="{StaticResource DataGridCheckBox}" IsChecked="True"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
        <ListViewItem>Item1</ListViewItem>
        <ListViewItem>Item2</ListViewItem>
        <ListViewItem>Item3</ListViewItem>
    </ListView>
</Grid>

【讨论】:

  • 对不起,梅尔。我使用的是 DataGrid 而不是 ListView。你有一些可以翻译的代码吗?我似乎找不到 GridViewColumns 的 Horizo​​ntalContentAlignment 属性。
  • @Sonny Boy:您使用的是哪个 DataGrid?对于 MS DataGrid,它们被称为 DataGridColumn 等,这就是我假设您使用 ListView 的原因
  • 对不起...我有点糊涂了。我已按照您的建议进行了更改,但没有发现任何区别。
  • @Sonny Boy: 做了一个 xaml 唯一的例子,其中 CheckBoxes 居中
  • 好东西。我已将该样式添加到我的 App.xaml 文件中,并且它可以全面运行。现在我只需要将其限制为具有 CheckBoxes 的列...... :)
猜你喜欢
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 2016-01-25
相关资源
最近更新 更多