2009-10-22 5 views
1

사용자 지정 컨트롤을 만들고 있습니다.종속성 속성을 기반으로 컨트롤을 어떻게 바꿀 수 있습니까?

이 컨트롤의 템플릿에서 CanExpand라는 종속성 속성의 값을 기반으로 루트 컨트롤에 대해 다른 컨트롤을 사용하고 싶습니다. CanExpand는 사용자 지정 컨트롤 클래스에서 정의됩니다.

CanExpand 사실이라면, 내가 확장기를 사용하여 표시 할이 :

<ControlTemplate ...> 
    <HeaderedContentControl ...> 
     <!--...--> 
     <ContentPresenter/> 
    </HeaderedContentControl> 
</ControlTemplate> 

가 나는를 사용하여 생각 : CanExpand이 거짓이면

<ControlTemplate ...> 
    <Expander ...> 
     <!--...--> 
     <ContentPresenter/> 
    </Expander> 
</ControlTemplate> 

, 내가 대신 HeaderedContentControl를 사용하여 표시 할 DataTemplateSelector,하지만 이것은 DataTemplate이 아닌 ControlTemplate이며 컨트롤의 Template에 대한 selector 속성이 없습니다.

자식 콘텐트가 하나의 컨트롤에서만 살아 있기 때문에 다른 컨트롤을 표시/숨김으로 설정할 수 없습니다. 또한, 나는 당신이 방아쇠를 사용하여 콘텐츠 속성을 변경할 수 있다고 생각하지 않습니다.

제안 사항?

감사합니다.

답변

2

스타일 내부에서 기본 상태에 대한 ControlTemplate 속성을 설정 한 다음 ControlTemplate 속성을 다른 템플릿으로 설정하는 트리거를 갖습니다. 예를 들어 :

<Style ...> 
    <Setter Property="ControlTemplate"> 
     <ControlTemplate ...>  
     </ControlTemplate> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="YourProperty" Value="WhateverValue"> 
      <Setter Property="ControlTemplate"> 
       <ControlTemplate ...> 
       </ControlTemplate> 
      </Setter> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

가 명심 여러 값의 동일한 속성에 트리거를 가질 수 완전히 다른 템플릿을지고 각각의 값.

+0

스타일 안에 EventTriggers 만있을 수 있다고 생각했습니다. –

+0

아니요, 스타일에서 속성 트리거가 허용됩니다. 엘리먼트에 직접 트리거를 두어 EventTriggers 만 사용할 수 있습니다. –

+0

그것은 정답입니다 :) – Anvaka

관련 문제