2012-02-28 2 views
7

사용자 지정 컨트롤 템플릿을 사용하고 몇 가지 추가 된 종속성 속성이있는 슬라이더에서 파생 된 클래스가 있습니다. 새 속성을 기반으로 템플릿 내에서 트리거를 실행하고 싶습니다.ControlTemplate 트리거에서 사용자 지정 속성을 사용하는 방법

예를 들어 ThumbIsVisible이라는 새로운 종속성 속성이 있습니다.이 속성을 false로 설정하면 내 슬라이더의 엄지 부분 만 hiddin이됩니다. 내가 제어 tempate의의를 가지고 나는이 작동하지 않습니다 볼 수 있습니다

<ControlTempate.Trigger> 
<Trigger Property="ThumbIsVisible" Value="False"> 
<Setter TargetName="m_Thumb" Property="Visibility" Value="Collapsed" /> 

오른쪽 박쥐 : 내가 좋아 보이는 트리거에 추가 할

<Slider.Template> 
<ControlTemplate TargetType="{x:Type Slider}"> 
... 
<Track.Thumb> 
<Thumb x:Name="m_Thumb" Style="{StaticResource SliderThumbStyle}" /> 
... 

:처럼 내 컨트롤 템플릿 보인다 대상 유형을 슬라이더로 설정합니다. 그러나 그 말을 바꾸면 :

<ControlTemplate TargetType="{x:Type local:myCustomSlider}"> 

그런 다음 컨트롤과 다른 템플릿 유형의 문제가 발생합니다. 이 문제를 해결하는 유일한 방법은 Slider 대신 type : myCustomSlider를 사용하여 xaml을 만드는 것입니다. 그러나 이렇게하면 VisualStudio의 디자이너와 코드에 많은 문제가 발생합니다.

이 모든 것을 해결할 수있는 표준 방법이 있다면 누구에게 알 수 있습니까? 일시적인 해결책으로 코드 숨김을 통해 템플릿의 트리거에 추가를 시도했지만 작동하지 못했습니다.

+2

답변을 답으로 추가하고 답변을 수락하면 응답하지 않는 채로 앉지 않습니다. – kevev22

+0

나는 명성 100 점이나 초보자 8 시간자가 응답 한도를 얻 자마자 곧 올 것이다. – BruceLH

답변

2

이 문제를 해결하는 훨씬 간단한 방법이있는 것처럼 보입니다.

<ControlTemplate.Triggers> 
    <DataTrigger Property=local:CustomSlider.ThumbIsVisible" Value="False">  
    <Setter TargetName="m_Thumb" Property="Visibility" Value="Hidden" /> 
    </DataTrigger> 
</ControlTemplate.Triggers> 

여기서 local은 CustomSlider 클래스의 네임 스페이스입니다.

+0

'DataTrigger'는 .NET 4.에 'Property' 속성을 포함하지 않습니다. 어떻게 작동합니까? – Nayan

+0

@Nayan : 좀 늦었지 만, 이것이 'DataTrigger'가 아니라 'Trigger'라고 생각됩니다. – dotNET

2

물론 2 일 동안 먼저 답을 찾았을 때 내 질문을 게시 한 후 30 분이 지나야 답변을 찾을 수 있습니다. 오, DataTriggers를 사용하는 것이 해결책입니다.

<ControlTemplate.Triggers> 
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=ThumbIsVisible}" Value="False"> 
    <Setter TargetName="m_Thumb" Property="Visibility" Value="Hidden" /> 
    </DataTrigger> 
</ControlTemplate.Triggers> 

키는 RelativeSource = {RelativeSource Self}를 사용하여 사용자 지정 속성을 찾는 것입니다. 그 후 그것은 예상대로 정확하게 작동합니다.

관련 문제