2012-02-10 5 views
1

클래스에 바인딩 된 버튼에 대해이 xaml을 보유하고 있습니다. 클래스에 다른 속성을 추가하고 속성 값이 0보다 클 경우 버튼의 배경색을 노란색으로 지정합니다.바인딩 된 항목을 기준으로 버튼의 색상을 변경하십시오.

<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

지금까지 내가 함께 왔어요 줄을 "hello world"라고합니다.

답변을 표시하면 원하는 결과를 얻으려면 최소한의 코드가 필요합니다.

2

This은 좋은 예를 제시해야합니다. 그 핵심은 스타일 트리거를 사용하여 배경색을 결정해야한다는 것입니다.

0

가장 간단한 방법은 속성의 값을 색상으로 변환하는 바인딩에 IValueConverter을 만들거나 값에 따라 색상을 설정하는 항목의 스타일에 을 사용하는 것입니다.

+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"   /> 

을, 당신이에 변환기를 정적 자원으로 페이지에 추가하십시오.

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

내가 WPF를 이해하지 않는다, 당신이 스물를 작성해야 것 같다 바인딩 클래스 뒤에 코드에서 다음

Background="{Binding Path=BackColor}" 

그리고 :

+0

사실 전경이 아닌 배경을 바인딩해야합니다. – Paparazzi

+0

나는 우연히 답을 득표했습니다. 당신이 당신의 대답을 바꾸어 주면 나는 아래 표를 제거 할 수 있습니다. – Paparazzi

+0

그럼 배경에 바인딩 할 수 있습니다. 나는 대답에서 편집하여 아래 표를 제거 할 수 있습니다 :) –

관련 문제