2016-10-27 1 views
1

에 버튼 DynamicResource 스타일과 DataTrigger 사용/DataTrigger를 통해 Button을 사용하지 않도록 설정합니다.내가 <code>Style="{DynamicResource SquareButtonStyle}"</code> 수정할 수 없습니다</p> <p>같은 미리 정의 된 스타일을 사용하고 내가 활성화해야 XAML

불가능한 것처럼 보입니까?

오류는 다음과 같습니다. '스타일'속성이 두 번 이상 설정되었습니다.

<Button Content="Guardar" Width="100" Style="{DynamicResource SquareButtonStyle}" Name="SaveTemplateATM" Click="SaveTemplateATM_Click"> 
    <Button.Style> 
     <Style TargetType="{x:Type Button}"> 
       <Style.Triggers> 
         <DataTrigger Binding="{Binding Text.Length, ElementName=UserName, UpdateSourceTrigger=PropertyChanged}" Value="0"> 
          <Setter Property="IsEnabled" Value="False"/> 
         </DataTrigger>           
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

답변

2

당신은 한 번만 스타일 속성 (또는 속성)을 설정할 수 있지만 자원 스타일에 따라 하는 새로운 스타일로 설정할 수 있습니다. 즉, 리소스 스타일에 포함 된 모든 것을 상속받으며 추가 한 내용이 모두 포함됩니다.

<Button Content="Guardar" Width="100" Name="SaveTemplateATM" Click="SaveTemplateATM_Click"> 
    <Button.Style> 
     <Style 
      TargetType="{x:Type Button}" 
      BasedOn="{StaticResource SquareButtonStyle}" 
      > 
      <Style.Triggers> 
       <DataTrigger 
        Binding="{Binding Text.Length, ElementName=UserName}" 
        Value="0" 
        > 
        <Setter 
         Property="IsEnabled" 
         Value="False" 
         /> 
       </DataTrigger>           
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

또한, UpdateSourceTrigger=PropertyChanged 여기에 가장 무해한,하지만 당신은 그 바인딩에 그것을 원하지 않습니다. 이 플래그는 대상이 변경 될 때 (이 경우 Button.IsEnabled) Binding 소스 바인딩 (이 경우 UserName.Text.Length) 속성을 업데이트하는 방법을 알려주는 것입니다. 여기서 의미가 없습니다 : UserName.Text.Length이 읽기 ​​전용이 아니더라도 그 Binding은 절대 업데이트하지 않으므로 원하지 않을 것입니다.

UpdateSourceTrigger 플래그는 사용자가 뷰 모델 문자열 속성에 TextBoxText 속성을 바인딩 된 경우 예를 들어, 양방향 바인딩의 기본 동작을 수정하기위한 것입니다

은 기본 동작은 TextBox이 잃을 때 뷰 모델 속성을 업데이트하는 것입니다 초점. 대신 사용자가 문자를 입력 할 때마다 업데이트되도록 할 수 있습니다.이 경우 BindingUpdateSourceTrigger=PropertyChanged을 줄 수 있습니다.

+0

감사합니다. 내가 당신의 코드를 사용할 때 '추가 정보 :'DynamicResourceExtension '을'Style '유형의'BasedOn '속성에서 설정할 수 없습니다. 'DynamicResourceExtension'은 DependencyObject의 DependencyProperty에서만 설정할 수 있습니다. ' –

+0

@Dimi Hmm. 안좋다. 'DynamicResource' 대신'StaticResource'를 사용할 수 있습니까? –

+0

예. 고맙습니다! –

관련 문제