2011-09-07 62 views

回答

18

使用觸發器的結合表達:

<Button> 
    <Button.Style> 
     <Style TargetType="Button"> 
      <!-- Set the default value here (if any) 
       if you set it directly on the button that will override the trigger --> 
      <Setter Property="Background" Value="LightGreen" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding SomeConditionalProperty}" 
          Value="True"> 
        <Setter Property="Background" Value="Pink" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

[Regarding the note]


在MVVM也可以經常在通過get-僅屬性視圖模型處理這個問題,以及,例如

public bool SomeConditionalProperty 
{ 
    get { /*...*/ } 
    set 
    { 
     //... 

     OnPropertyChanged("SomeConditionalProperty"); 
     //Because Background is dependent on this property. 
     OnPropertyChanged("Background"); 
    } 
} 
public Brush Background 
{ 
    get 
    { 
     return SomeConditinalProperty ? Brushes.Pink : Brushes.LightGreen; 
    } 
} 

然後你只要綁定到Background

+0

當使用wpf時,這是一個非常好的方法,如果您尋找可以移植到silverlight的代碼,您可能還需要表達式SDK以用於觸發器語義 –

22

你可以在後臺綁定到一個屬性上的視圖模型的伎倆是使用的IValueConverter與您需要從視圖模型一個布爾值轉換爲顏色的顏色,下面有一個例子返回刷

public class BoolToColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
     { 
      return new SolidColorBrush(Colors.Transparent); 
     } 

     return System.Convert.ToBoolean(value) ? 
      new SolidColorBrush(Colors.Red) 
      : new SolidColorBrush(Colors.Transparent); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

與像

"{Binding Reviewed, Converter={StaticResource BoolToColorConverter}}" 
+0

這比WPF的選定答案更好。 – tzerb

相關問題