Применить стиль на основе значения свойства - PullRequest
8 голосов
/ 06 сентября 2011

Работа с Infragistics XamDataGrid Я столкнулся с ситуацией, когда я хочу применить стиль, только если установлено определенное свойство. Тем не менее, я думаю, что это скорее общий вопрос о стиле WPF, чем о xamDataGrid.

Нижеприведенный стиль - это то, что я сейчас использую. Он добавляет флажки в область селектора записи:

<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 Ответ

10 голосов
/ 06 сентября 2011

Вы не можете запретить применение стиля изнутри самого стиля, но вы можете предотвратить применение его сеттеров с помощью Style.Triggers:

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