Триггер WPF не равен нулю

Как запустить действие в WPF, если свойство не равно нулю? Это рабочее решение, когда имеет значение null:

<Style.Triggers>
    <DataTrigger Binding="{Binding}" Value="{x:Null}">

      <Setter Property="Background" Value="Yellow" />

    </DataTrigger>
</Style.Triggers>

Я знаю, что вы не можете "изменить" состояние и сделать то, что вам нужно, но хотите знать


person PaN1C_Showt1Me    schedule 06.08.2009    source источник
comment
Это дубликат: http://stackoverflow.com/questions/356194/wpf-datatrigger-where-value-is-not-null   -  person Szymon Rozga    schedule 06.08.2009


Ответы (3)


К сожалению, нет. Но на самом деле в этом нет необходимости: вам просто нужно указать фон, когда значение не равно нулю в установщиках стиля, а не в триггере:

<Style.Setters>
    <!-- Background when value is not null -->
    <Setter Property="Background" Value="Blue" />
</Style.Setters>
<Style.Triggers>
    <DataTrigger Binding="{Binding}" Value="{x:Null}">

      <Setter Property="Background" Value="Yellow" />

    </DataTrigger>
</Style.Triggers>
person Thomas Levesque    schedule 06.08.2009

Вы можете использовать класс DataTrigger в Microsoft.Expression.Interactions.dll, который поставляется с Expression Blend.

Пример кода:

<i:Interaction.Triggers>
    <ie:DataTrigger Binding="{Binding YourProperty}" Value="{x:Null}" Comparison="NotEqual">
       <ie:ChangePropertyAction PropertyName="YourTargetPropertyName" Value="{Binding YourValue}"/>
    </ie:DataTrigger>
</i:Interaction.Triggers>

Используя этот метод, вы также можете активировать GreaterThan и LessThan. Чтобы использовать этот код, вы должны сослаться на две библиотеки DLL:

System.Windows.Interactivity.dll
Microsoft.Expression.Interactions.dll

И добавьте соответствующие пространства имен:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"  
xmlns:ie="http://schemas.microsoft.com/expression/2010/interactions"
person yossharel    schedule 23.04.2013

это старый вопрос, но я хочу ответить. На самом деле можно. Просто нужно использовать конвертер в привязке. Конвертер должен возвращать значение null или нет. Таким образом, вы проверите, что утверждение верно или неверно. Это означает, что вы можете проверить два условия, если возвращаемое значение ложно, это означает, что оно не равно нулю. Если это правда, это значит, что это ноль.

<converters:IsNullConverter x:Key="IsNullConverterInstance"/>

<Style>
<Style.Triggers>
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=DataContext, Converter={StaticResource IsNullConverterInstance}" Value="True">    
      <Setter Property="Background" Value="Yellow" />    
    </DataTrigger>
</Style.Triggers></Style>


    public class IsNulConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {

        return value == null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {

        return Binding.DoNothing;
    }
}
person Doctor    schedule 26.01.2017