条件不等于时触发

Nut*_*uts 10 wpf styles

我需要一个StyleWPF下,在多个条件满载时设置几个属性.但是,我的一个条件是类型Not Equal To.我应该如何更改以下Style条件才能成为条件Not Equal To?没有它可以实现IValueConverter吗?

<Style>
    <Style.Triggers>
        <MultiDataTrigger>
             <MultiDataTrigger.Conditions>
                  <!--<Condition 1 here.../>-->
                  <!--<Condition 2 here.../>-->
                  <Condition Binding="{Binding Path=id}" Value="3"/>
             </MultiDataTrigger.Conditions>
             <Setter Property="Background" Value="Red"/>
             <Setter Property="Foreground" Value="Black"/>
         </MultiDataTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

我需要以下但这当然不起作用,因为触发器只支持Equal运算符.

<Style>
    <Style.Triggers>
        <MultiDataTrigger>
             <MultiDataTrigger.Conditions>
                  <!--<Condition 1 here.../>-->
                  <!--<Condition 2 here.../>-->
                  <Condition Binding="{Binding Path=id}" Value<>"3"/>
             </MultiDataTrigger.Conditions>
             <Setter Property="Background" Value="Red"/>
             <Setter Property="Foreground" Value="Black"/>
         </MultiDataTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

Ros*_*oss 11

你需要一个IValueConverter额外的标记:

    <Style>
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <!--<Condition 1 here.../>-->
                    <!--<Condition 2 here.../>-->
                    <Condition>
                        <Condition.Binding>
                            <Binding Path="id" Converter="{StaticResource ValueToEqualsParameterConverter}">
                                <Binding.ConverterParameter>
                                    <System:Int32>3</System:Int32>
                                </Binding.ConverterParameter>
                            </Binding>
                        </Condition.Binding>
                        <Condition.Value>
                            <System:Boolean>False</System:Boolean>
                        </Condition.Value>
                    </Condition>
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="Red" />
                <Setter Property="Foreground" Value="Black" />
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>
Run Code Online (Sandbox Code Playgroud)

和转换器:

public class ValueToEqualsParameterConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
        return value == parameter; 
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
        return null; 
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 注意 Enum 参数和其他类型的参数,它不起作用。在转换器中使用 `return Equals(value, parameter);` (2认同)

小智 5

另一种选择是在样式中定义默认值作为setter,然后实现数据触发器。在下面的代码中,背景值始终为红色,除非值为 3

<Style>  
  <Setter Property="Background" Value="Red"/>
  <Setter Property="Foreground" Value="Black"/>
    <Style.Triggers>
        <MultiDataTrigger>
             <MultiDataTrigger.Conditions>
                  <!--<Condition 1 here.../>-->
                  <!--<Condition 2 here.../>-->
                  <Condition Binding="{Binding Path=id}" Value="3"/>
             </MultiDataTrigger.Conditions>
             <Setter Property="Background" Value="DefaultColor"/>
             <Setter Property="Foreground" Value="DefaultColor2"/>
         </MultiDataTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)