2012-02-10 6 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

答えて

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

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

+0

私は偶然にあなたの答えを投票しました。あなたがあなたの答えを変更するなら、私は投票を削除することができます。 – Paparazzi

+0

よく背景にバインドできます。私は答えでそれを編集して下の票を削除することができます:) –

関連する問題