2012-02-10 47 views
1

我對綁定到類的按鈕具有此xaml。我向該類中添加了另一個屬性,並且如果該屬性的值大於零,則該按鈕的背景顏色爲黃色。根據綁定項目更改按鈕的顏色

<local:TileView x:Key="Button_Available_View"> 
    <local:TileView.ItemTemplate> 
    <DataTemplate> 
     <Grid> 
     <Button 
      Command="command:Command_Button_AvailableTags.Command" 
      CommandParameter="{Binding Path=Name}" 
      Content="{Binding Path=Name}" 
      Tag="{Binding Path=Name}" 
      HorizontalAlignment="Stretch" 
      Padding="3,1,3,1" 
      Margin="0" 
      HorizontalContentAlignment="Center" 
      /> 
     </Grid> 
    </DataTemplate> 
    </local:TileView.ItemTemplate> 
</local:TileView> 

我該如何修改?

+2

將顏色綁定到屬性,但然後需要轉換器才能返回顏色。 – Paparazzi 2012-02-10 21:36:45

回答

0

到目前爲止,我想出了:

Background="{Binding Path=BackColor}" 

然後在後面綁定類代碼:

public Brush BackColor 
{ 
    get 
    { 
     if (SimilarHits > 0) return Brushes.Yellow; 
     return Brushes.WhiteSmoke; 
    } 
} 

我不明白WPF,看來你得寫20行說"hello world"

標記此答案 - 獲得所需結果的代碼量最少。

2

This應該給你一些很好的例子來解決。它的本質是你需要使用風格觸發器來確定你的背景應該是哪種顏色。

0

最簡單的方法是在綁定上創建一個IValueConverter,將屬性的值轉換爲顏色,或者在您的項目樣式中使用DataTrigger來設置基於值的顏色?

+0

我更喜歡datatrigger,因爲它不需要隱藏代碼。 – mydogisbox 2012-02-10 21:44:17

1

您必須將按鈕的Foreground屬性綁定到視圖模型的屬性。然後,您可以使用轉換器將該值轉換爲彩色。

轉換器應該是這樣的:

public class TextToColorConverter: IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (((int)value) > 0) 
       return Brushes.Yellow; 
      else 
       // for default value 
       return Brushes.Blue; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      // no need to implement it 
      throw new NotImplementedException(); 
     } 

    } 

編輯:更新綁定的背景而不是前景 的XAML將是XAML:

<Button 
    Background="{Binding Path=Property, Converter={StaticResource textToColorConverter}}"     Command="command:Command_Button_AvailableTags.Command"    CommandParameter="{Binding Path=Name}"   Content="{Binding Path=Name}"   Tag="{Binding Path=Name}"   HorizontalAlignment="Stretch"   Padding="3,1,3,1"   Margin="0"   HorizontalContentAlignment="Center"   /> 

當然,你必須將轉換器作爲靜態資源添加到頁面。

+0

其實需要綁定背景不是前景 – Paparazzi 2012-02-11 02:31:31

+0

我倒是投了你的答案。如果你會改變你的答案,我可以刪除反對票。 – Paparazzi 2012-02-11 03:12:46

+0

那麼你可以綁定到背景。我將在答案中進行編輯,以便您可以刪除投票:) – 2012-02-11 04:48:35