2010-03-10 5 views
2

내 텍스트 상자의 Validation.HasErrorsTrue 인 경우 일종의 트리거를 사용하여 내 윈도우의 버튼을 IsEnabled = False으로 변경하고 싶습니다.다른 컨트롤의 속성에 따라 속성을 변경하십시오. - WPF

버튼에서 어떤 종류의 트리거로이를 수행 할 수 있습니까?

예인 경우, 좋은 예가 될 것입니다.

+0

WPF TextBox 개체에 유효성 검사 속성이 없습니다. 뭔가 빠졌습니까? – Jake

+0

Jake : Validation.HasError 첨부 속성이 누락되었습니다. – itowlson

+1

@itowlson : wpf에 대해 배울 점이있는 사람에게만 감사드립니다.) http://msdn.microsoft.com/en-us/library/system.windows.controls .validation.haserror.aspx – Jake

답변

4

스타일을 사용하여이 작업을 수행 할 수 있습니다. 텍스트 상자에 직접 넥타이하려는 경우, 당신이 뭔가를 할 수 있습니다 : 버튼이 이미 다른 속성의 DataContext에 바인딩되지 않은 경우 작동

<Style x:Key="DisabledOnErrors" TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding (Validation.HasErrors)}" Value="True"> 
       <Setter Property="IsEnabled" Value="False"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

<TextBox x:Name="myTextBox" /> 
    <Button Style="{StaticResource DisabledOnErrors}" 
      DataContext="{Binding ElementName=myTextBox}" /> 

합니다. 이 경우 스타일은 다른 단추 및 텍스트 상자 쌍에 대해 재사용 할 수 있습니다.

+0

하나의 버튼에 여러 텍스트 상자에 적용 할 수 있습니까? –

+0

MultiBinding과 사용자 지정 IMultiValueConverter를 사용해 볼 수 있습니다. 필자는 이러한 경험이별로 없지만 일반적으로 Button IsEnabled를 직접 바인딩하여 아래에 표시된 ElementName 구문을 사용하여 모든 텍스트 상자 (Validation.HasErrors)에 바인딩하는 MultiBinding에 바인딩하는 것이 좋습니다. 그런 다음 bool 값의 목록을 취한 다음 모두 OR로 연결하지 않는 IMultiValueConverter가 필요합니다. –

2

예, 트리거와 함께이 작업을 수행 할 수 있지만 다른 요소를 참조하고 있기 때문에, 당신은 오히려 일반 트리거보다 DataTrigger를 사용해야합니다

<Button> 
    <Button.Style> 
    <Style TargetType="Button"> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding (Validation.HasError), ElementName=tb}" Value="True"> 
      <Setter Property="IsEnabled" Value="False" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Button.Style> 
</Button> 

참고하면 버튼이 아닌 스타일을 사용해야합니다 .Triggers 컬렉션에는 Button.Triggers에 EventTriggers 만 포함될 수 있기 때문에 컬렉션이 필요합니다.

+0

Image 및 Visibility 속성을 사용하여이 작업을 시도했지만 작동하지 않습니다. Button (Visibility 속성 포함)을 사용하면 작동합니다. 나는 이유를 알 수 없다. 이견있는 사람? 고맙습니다, 마크. – obiwanjacobi

관련 문제