2014-04-28 2 views
1

WP8에서 TextBlock의 전경색을 제 바인딩의 부울 속성을 기반으로 다른 색상으로 설정하고 싶습니다. 또한 색상에 StaticResource를 사용하고 싶습니다.Windows Phone 8의 조건부 StaticResource

하나의 가능성은 이것에 대해 ValueConverter를 사용하고 있지만 StaticResources로는 지금까지 작동하지 못했습니다.

<TextBlock Foreground="{Binding IsBlue, Converter={StaticResource BoolToColorConverter}}" /> 

그리고 내 컨버터 (I 문자열을 반환하는 작업을 것이라고 생각하지만, 어쨌든 그것을 테스트하기로 결정하지 않았다) : 내가 노력 코드는 같은했다 또한

public class BoolToColorConverter : IValueConverter{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
     return (value is bool && (bool)value) ? "{StaticResource PhoneAccentBrush}" : "{StaticResource PhoneSubtleBrush}"; 
     } 
} 

을, I DataTriggers를 사용하여 보았지만 WP8이 직접 지원하지 않는다는 것을 알았습니다.

먼저 종속성 속성을 시도하지 않았습니다. 먼저이를 해결하기위한 더 간단하고 분명한 방법이 누락되지 않았 음을 확인하고 싶습니다.

가장 좋은 방법은 무엇입니까?

+3

에서 브러쉬를 복구하는 것입니다? 또는 하드 코딩 된 것으로 생각되면 TrueBrush 및 FalseBrush 속성을 변환기에 추가하고 리소스 정의에서 특정 브러시로 설정 한 다음 x : 적절하게 이름을 지정합니다 (예 : SubtleConverter)? – Will

+0

@ 윌, 귀하의 의견을 보내 주셔서 감사합니다. 정적 리소스 (예 : PhoneAccentColor)를 사용하고 싶습니다. 지금은 브러시 자체를 반환하는 것이 바람직하지 않습니다. 또는 리소스가있는 브러시를 초기화 할 수 있습니다. TrueBrush, FalseBrush 아이디어가 아주 좋은 것으로 나타났습니다. 당신은 그 모범을 보았습니까? – sTodorov

+0

@ 윌, nvm, 나는 고쳤다. 당신의 아이디어에 감사드립니다. 내가 그걸 표시 할 수 있도록 대답 할 수 있니? – sTodorov

답변

1

당신은이 문제를 해결하는 방법은 두 가지가 있습니다

당신은 바인딩

public class BooleanToBrushConverter 
     : IValueConverter 
    { 
     public Brush TrueBrush { get; set; } 
     public Brush FalseBrush { get; set; } 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value is bool) 
      { 
       return (bool) value 
        ? TrueBrush 
        : FalseBrush; 
      } 

      return value; 
     } 

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

에 의해 채워집니다 추가 등록하여 계산기를 확장 할 수 있습니다 이제 당신은 페이지의 자원에 의해 초기화 할 수

<BooleanToBrushConverter x:Key="BooleanToBrushConverter" TrueBrush="{StaticResource PhoneAccentBrush}" FalseColor="{StaticResource PhoneSubtleBrush}" /> 

그리고 사용이 쉬운

로 0

두 번째 솔루션은 코드의 수정이 왜 당신이 원하는 브러쉬를 반환하지 응용 프로그램 자원

public class BoolToColorConverter 
    : IValueConverter{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 

     return (value is bool && (bool)value) ? Application.Current.Resources["PhoneAccentBrush"] : Application.Current.Resources["PhoneSubtleBrush"]; 
     } 
} 
+0

명확한 설명을 주셔서 감사합니다! – sTodorov