WPF触发器不为空(WPF Trigger not null)

2019-07-31 12:23发布

如何当属性不为null触发WPF的行动? 这是一个可行的解决方案为空时:

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

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

    </DataTrigger>
</Style.Triggers>

我知道你不能“转身”的条件,你需要什么,而是想知道

Answer 1:

不幸的是,你不能。 但实际上这是没有必要:你只需要指定,如果值是在风格​​制定者不为空,在不触发的背景:

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


Answer 2:

您可以使用DataTriggerMicrosoft.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>

使用这种方法,你可以触发对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" 


Answer 3:

这是一个老问题,但我想要的答案。 其实你可以。 只要你有结合使用转换器。 转换器必须返回为空或不是。 所以,你会检查说法是真还是假。 它提供您可以检查两个条件,如果返回值是假的,这意味着它不为空。 如果这是真的,这意味着它是空的。

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


文章来源: WPF Trigger not null
标签: wpf triggers