WPF触发器不为空。

5
如何在WPF中当属性不为空时触发动作?以下是一个可行的解决方案,用于处理为空的情况:
<Style.Triggers>
    <DataTrigger Binding="{Binding}" Value="{x:Null}">

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

    </DataTrigger>
</Style.Triggers>

我知道你不能“扭转”条件并做你需要的事情,但想了解


1
这是一个重复的问题:https://dev59.com/6HRC5IYBdhLWcg3wROtQ - Szymon Rozga
3个回答

12

很遗憾,你不能这样做。但实际上这并不必要:在样式设置器中,你只需要为值不为null时指定背景,而不是在触发器中指定:

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

8
你可以使用随附于Expression Blend的Microsoft.Expression.Interactions.dll中的DataTrigger类。
代码示例:
<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>

使用这种方法,您也可以针对 GreaterThanLessThan 执行触发。为了使用此代码,您应该引用两个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"

0

这是一个老问题,但我想回答一下。实际上你可以。只需要在绑定中使用转换器。转换器必须返回 null 或者非 null 值。这样你就可以检查语句的真假了。它提供了两个条件的检查,如果返回值为 false,则表示它不是 null。如果返回值为 true,则表示它是 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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接