2011-11-23 1 views

답변

1

바지, 바지! ... 적어도 솔루션을 찾았지만 힘들었습니다!

내 솔루션은 다음과 같습니다, 실버 DataTrigger에서 (와 WPF는 대조적으로 ...

  • <Style x:Key="modItemMainParts" TargetType="ListBoxItem"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListBoxItem"> 
           <Grid x:Name="g" Background="{TemplateBinding Background}"> 
    
            ... 
    
            <i:Interaction.Triggers> 
             <ei:DataTrigger Binding="{Binding abilitato}" Value="False"> 
              <ei:ChangePropertyAction TargetObject="{Binding ElementName=g}" TargetName="IsHitTestVisible" Value="False" PropertyName="IsHitTestVisible"/> 
              <ei:ChangePropertyAction TargetObject="{Binding ElementName=g}" TargetName="Opacity" Value="0.5" PropertyName="Opacity"/> 
             </ei:DataTrigger> 
            </i:Interaction.Triggers> 
           </Grid> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
    </Style> 
    

    결론은 presonal하고 확실히 몇 가지 문제는 해결할 수 있지만, 그 ChangePropertyAction) 다른 곳에서 다음 템플릿 내부 컨트롤에 머물 수 없습니다. 그리고 ChangePropertyAction 객체의 TargetObject 속성은 템플릿 안의 컨트롤의 이름 만 연결하여 바인딩 할 수 있습니다. (TargetObject = "{Binding ElementName = g}")

  • 이렇게 DataTrigger를 전체 항목 및 그것의 속성을 설정 IsEnabled하지만 우리는 모든 단일 컨트롤을 사용해야합니다, 그리고 우리는 항목이 비활성화되었을 때의 동작을 재현해야합니다. 특히 마우스 입력에 대한 책임을 회피하기 위해 모든 다른 컨트롤이 포함 된 주 격자의 IsHitTestVisible 속성을 False로 설정할 수 있습니다.

마지막으로 WPF에서는 훨씬 더 쉬웠지만 중요한 것은 무엇을 해야할지를 아는 것입니다.

관련 문제