根据属性值应用Style

时间:2011-09-06 16:39:39

标签: wpf infragistics xamdatagrid

使用Infragistics XamDataGrid我遇到了一种情况,我只想在设置了某个属性时才应用Style。但是,我认为这更像是一个普通的WPF /样式问题而不是特定于xamDataGrid。

以下风格是我目前使用的风格。它将checkBox添加到记录选择器区域:

<Style TargetType="{x:Type igDP:RecordSelector}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type igDP:RecordSelector}">
                <CheckBox x:Name="HeaderCheckBox"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            IsChecked="{Binding Path=DataItem.IsChecked}">
                </CheckBox>
                <ControlTemplate.Triggers>
                  <Trigger Property="IsFilterRecord" Value="True">
                    <Setter TargetName="HeaderCheckBox" Property="Visibility" Value="Collapsed"/>
                  </Trigger>
                  <Trigger Property="IsAddRecord" Value="True">
                    <Setter TargetName="HeaderCheckBox" Property="Visibility" Value="Collapsed"/>
                  </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

TargetType是RecordSelector。如果记录是过滤行或添加记录行,我不想显示复选框。

我想更改此项,以便如果记录是添加记录行(IsAddRecord == true),则根本不应用该样式。我希望添加记录行保留其默认样式。

这可能吗?

1 个答案:

答案 0 :(得分:10)

您无法阻止在Style中应用Style,但您可以使用Style.Triggers阻止其Setter应用:

<Style TargetType="{x:Type igDP:RecordSelector}">
    <Style.Triggers>
        <Trigger Property="IsAddRecord" Value="False">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type igDP:RecordSelector}">
                        <CheckBox x:Name="HeaderCheckBox"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    IsChecked="{Binding Path=DataItem.IsChecked}">
                        </CheckBox>
                        <ControlTemplate.Triggers>
                          <Trigger Property="IsFilterRecord" Value="True">
                            <Setter TargetName="HeaderCheckBox" Property="Visibility" Value="Collapsed"/>
                          </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>