문제

사용자 정의 컨트롤을 만들고 있습니다.

이 컨트롤의 템플릿이 CanExpand라는 종속성 속성의 값에 따라 루트 제어에 다른 컨트롤을 사용하기를 원합니다. CanExpand는 사용자 정의 컨트롤 클래스에 정의되어 있습니다.

CanexPand가 사실이라면 Expander를 사용하여 표시하고 싶습니다.

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

CanexPand가 False 인 경우 대신 HeaderEdContentControl을 사용하여 표시하고 싶습니다.

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

나는 DataTemplatesExector를 사용한다고 생각했지만 이것은 DataTemplate이 아닌 ControlTemplate이며 컨트롤 템플릿에 대한 선택기 속성이 없습니다.

자식 콘텐츠는 하나의 컨트롤 하에서 만 살 수 있기 때문에 트리거로 다양한 컨트롤을 표시/숨겨 지도록 설정할 수 없습니다. 또한 트리거를 사용하여 컨텐츠 속성을 변경할 수 있다고 생각하지 않습니다.

제안이 있습니까?

감사.

도움이 되었습니까?

해결책

스타일 내부에서 기본 상태의 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>

여러 값에 대해 동일한 속성에 트리거를 가질 수 있으며 각 값은 완전히 다른 템플릿을 얻습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top