在WPF中使用Picture或Icon而不是DataGridCheckBoxColumn

时间:2011-08-01 15:59:20

标签: wpf xaml datagrid controls styles

我想将DataGridColumn内部的CheckBox更改为一个图像,当它被选中时,将另一个更改为未选中时,我该怎么办? Ps:我的DataGridCheckBoxColumn定义如下:

 <DataGridCheckBoxColumn Header="Priority" Binding="{Binding PRIORITY, Converter={StaticResource converter}}"/>

Converter正在将字节转换为布尔值。

1 个答案:

答案 0 :(得分:3)

使用ElementStyleEditingElementStyle属性为符合该属性的CheckBox创建并设置不同的Template

e.g。

<DataGridCheckBoxColumn Binding="{Binding IsActive}">
    <DataGridCheckBoxColumn.ElementStyle>
        <Style TargetType="{x:Type CheckBox}">
            <Setter Property="IsEnabled" Value="False" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type CheckBox}">
                        <Image MaxWidth="32" MaxHeight="32">
                            <Image.Style>
                                <Style TargetType="{x:Type Image}">
                                    <Setter Property="Source" Value="Images/Error.ico" />
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=CheckBox}}" Value="True">
                                            <Setter Property="Source" Value="Images/Default.ico" />
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Image.Style>
                        </Image>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>

这使得列显示基于IsChecked的图像,URI只是硬编码并且CheckBox被禁用,因为ElementStyle中的编辑不会更改绑定对象上的任何属性。它的唯一目的是显示合适的图像。

EditingElementStyle未设置在此处,因此如果用户再次单击该单元格进行编辑,则会显示正常的CheckBox,可以选中或取消选中。

Screencap