WPF Trigger not null

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

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

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

    </DataTrigger>
</Style.Triggers>

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

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>

Ты можешь использовать 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"

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

<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;
    }
}
Другие вопросы по тегам