2009-08-06 129 views
4

如何在屬性不爲空時觸發WPF中的操作? 這是一個可行的解決方案時爲空WPF觸發器不爲空

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

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

    </DataTrigger> 
</Style.Triggers> 

我知道你不能「轉身」的條件,你需要什麼,而是想知道

+1

這是一個重複:http://stackoverflow.com/questions/356194/wpf-datatrigger-where-value-is-not-null – 2009-08-06 11:17:11

回答

6

不幸的是,你不能。但實際上這是沒有必要:你只需要指定背景當值不在風格制定者空,在不觸發:

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

「綁定」 不是屬性... – 2009-08-06 09:41:40

5

可以在Microsoft.Expression.Interactions使用DataTrigger類。 dll附帶表達混合

代碼示例:

<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

這是一個老問題,但我想回答。其實你可以。只需要在綁定中使用Converter。轉換器必須返回null或不。所以你會檢查語句是真是假。它規定如果返回值爲false,可以檢查兩個條件,這意味着它不爲空。如果是真的,則表示它爲空。

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