2011-09-15 2 views
-2
<TextBlock.Visibility> 
    <mat:MatcherConverter> 
     <mat:Matcher MatchVisibility="Visible" DismatchVisibility="Collapsed"> 
      <mat:Matcher Value1="{Binding Boolean1}" Value2="True" ComparisonOperator="AND"/> 
      <mat:Matcher Value1="{Binding Boolean2}" Value2="True" ComparisonOperator="AND"/> 
     </mat:Matcher> 
    </mat:MatcherConverter> 
</TextBlock.Visibility> 

MarkupExtension이 기본 클래스로 생각되는 클래스에 대해 어떻게 생각하세요? 이 경우 MatcherConverter가됩니다. 이 클래스는 모든 matchers를 재귀 적으로 처리하며 결과는 부울입니다.맞춤 클래스가있는 컨트롤의 가시성 설정

+0

목표가 무엇인지 다시 말해 줄 수 있습니까? 네가 한 말은 나에게 전혀 의미가 없다. –

+0

이것은 매우 모호합니다. 문제가 정확히 무엇입니까? 당신은 무엇을 시도 했습니까? 당신의 기대치를 어떻게 충족시키지 못 했습니까? –

+0

를 가시성으로 변환하는 방법을 모른다. MarkupExtension을 사용하여 합리적인 방법으로 제공 한 다음 ProvideValue 메서드로 변환 할 수 있습니다. – kusi581

답변

0

당신은 부울 당신이 (..., ChildrenValue1, Value2에) 평가하려는 결과를 리턴하는 Matcher에 속성 TheBooleanResult을 만들 수 있습니다. 그런 다음 IValueConverterMatcher으로 만들고 TheBooleanResult을 얻고 원하는 가시성을 반환합니다.

public class MatcherConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     Matcher m = (Matcher)value; 
     return m.TheBooleanResult ? Visibility.Visible : Visibility.Hidden; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

@ kusi581 질문에 대한 당신의 의견. 'Matcher'를 usercontrols 자원에 넣을 수 있습니다 (아마도'ObjectDataProvider'처럼). 그런 다음 해당 텍스트에 텍스트 상자의 가시성 속성을 바인딩합니다. [Example with ObjectDataProvider] (http://bea.stollnitz.com/blog/?p=22) – erikH

+0

은 두 가지 조건 (예 : 사용자 권한, 전역 권한)에 따라 가시성을 원한다고 말할 수 있습니다. 이제 나는 다른 2 개의 matchers를 자식으로 사용하여 가시성에 matcher를 추가합니다. 루트 정규 표현 엔진의 ComparisionOperator는 AND이며, 두 자식 계수 식은 모두 true 일 때 Visible, 그렇지 않으면 축소됩니다. 자식의 Value1은 모델의 Property에 바인딩됩니다. 따라서 matchers의 조합은 항상 다릅니다 – kusi581

+0

텍스트 상자의 리소스에 배치 할 수 있지만 다른 것을 찾고있는 것 같습니다. – erikH

관련 문제