2014-11-21 39 views
4

我需要WPF下的Style,它在满足多个条件时设置多个属性。但是,我的一个条件是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> 

我需要以下但这当然不工作,因为触发器只支持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> 
+0

*可不可以不来的IValueConverter实现,甚至永远冲?* ......不,不可能。 – Sheridan 2014-11-21 08:52:21

回答

9

需要在此的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> 

和转换器:

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

注意枚举参数和其他类型,它不会工作。相反,在你的转换器中使用'return Equals(value,parameter);' – 2017-09-14 09:55:05

-1

另一种选择是在风格定义默认值作为二传手,然后实现数据触发器。在下面的代码,背景值是除了当值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>