2014-11-05 5 views
0

내 응용 프로그램에 도구 창이 있습니다. 일부 텍스트 입력을 사용할 수 있으며 그 텍스트 상자에 몇 가지 유효성 검사 규칙이 있습니다. 는 검증 규칙 1 유효성 검사 규칙이 유효성 검사 규칙, 말 3로드시 약간의 추가 조건이있는 MultiTrigger

그 도구 창에 버튼과 울부 짖는 소리

<StackPanel.Resources> 
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyle}"> 
     <Style.Triggers> 
      <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
        <Condition Binding="{Binding ElementName=HeightTextbox, Path=(Validation.HasError)}" Value="false" /> 
        <Condition Binding="{Binding ElementName=WeightTextBox, Path=(Validation.HasError)}" Value="false" /> 
        <Condition Binding="{Binding ElementName=HeartRateTextBox, Path=(Validation.HasError)}"  Value="false"  /> 
       </MultiDataTrigger.Conditions> 
       <Setter Property="IsEnabled" Value="true"/> 
      </MultiDataTrigger> 
     </Style.Triggers> 
     <Setter Property="IsEnabled" Value="false" /> 
    </Style> 
</StackPanel.Resources> 

같은 스타일과 확인 버튼을

<Button Content="Ok" x:Name="OkButton" Height="32" Width="80" Command="{Binding OkCommand}"/> 

잘 작동하지만 유효성 검사 규칙이 만족스럽지 않든간에 사용자가 아무 문제도 열지 않을 때마다 단추가 비활성화되도록하고 싶지만 규칙도 적용해야합니다.

+1

질문을 올바르게 이해했다면'Command'에'CanExecute'를 써서'IsEnabled' 속성을 알아낼 수 있습니다. HTH – XAMlMAX

+0

어떻게 도구 창을 숨 깁니 까? 숨기기 (숨기기() 메소드 사용)? 물론'Close()'메쏘드를 사용한다면 창을 다시 불러 와서 열어야합니다. –

답변

0

당신은 바인딩 OneTime 모드를 사용하여 Visibility 재산을 듣고 일부 DataTrigger을 추가 시도하고 IsEnabledfalse에 설정할 수 있습니다.

<Style.Triggers> 
    <!-- your multi trigger ... --> 

    <DataTrigger Property="{Binding Visibility, 
          RelativeSource={RelativeSource Self}, 
          Mode=OneTime}" Value="Visible"> 
     <Setter Property="IsEnabled" Value="false" /> 
    </DataTrigger> 
</Style.Triggers> 

당신이 Close() 메소드를 호출 그래서 다음 번에 당신의 도구 창을 숨길 경우에만 위의 작품하면 창 개방이로드 될 것입니다 : 그것은 방아쇠를 오버라이드 (override) 할 수 있도록이 트리거는 사용자의 multitrigger 후 배치해야 먼저. 이 도구 창을 숨기고 다시 Show()를 사용하여 열 Hide() 방법 같은 것을 사용하는 경우

, 대신 다음 코드를 사용하여 시도 할 수 있습니다 :

<sys:Boolean x:Key="f">false</sys:Boolean> 
<Style.Triggers> 
    <!-- your multi trigger ... --> 

    <Trigger Property="Visibility" Value="Visible"> 
     <Setter Property="IsEnabled" Value="{Binding Resources[f], 
       RelativeSource={RelativeSource AncestorType=StackPanel}, 
       Mode=OneTime}"/> 
    </Trigger> 
</Style.Triggers> 

참고 sys 여기에 사용 된 접두사에 대해, 당신은에 있습니다 네임 스페이스 System을 XAML 코드로 가져옵니다. 이 일을하는 법을 알기를 바랍니다.