如何当属性不为null触发WPF的行动? 这是一个可行的解决方案为空时:
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
我知道你不能“转身”的条件,你需要什么,而是想知道
如何当属性不为null触发WPF的行动? 这是一个可行的解决方案为空时:
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
我知道你不能“转身”的条件,你需要什么,而是想知道
不幸的是,你不能。 但实际上这是没有必要:你只需要指定,如果值是在风格制定者不为空,在不触发的背景:
<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"
这是一个老问题,但我想要的答案。 其实你可以。 只要你有结合使用转换器。 转换器必须返回为空或不是。 所以,你会检查说法是真还是假。 它提供您可以检查两个条件,如果返回值是假的,这意味着它不为空。 如果这是真的,这意味着它是空的。
<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;
}
}