2012-02-28 9 views
7

カスタムコントロールテンプレートを使用し、いくつかの依存プロパティが追加されたスライダから派生したクラスがあります。新しいプロパティに基づいてテンプレート内のトリガを起動したいと思います。例えばControlTemplateトリガーでカスタムプロパティを使用する方法

、私はfalseに設定されたときに、私は私のスライダーのちょうど親指部分がhiddinしたいThumbIsVisibleと呼ばれる新しい依存関係プロパティを持っています。私のコントロールテンプレートは以下のようになります。私は私が制御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}" /> 
... 

私は次のようになり、トリガーに追加したいと思いますターゲットタイプをSliderに設定します。しかし、もし私がそれを変更すると:

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

私は、コントロールとは異なるテンプレートタイプの問題に遭遇します。これを回避する唯一の方法は、Sliderの代わりにlocal: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

もちろん、質問を投稿してから30分後に、最初に2日間過ごしたときの回答を見つけることができます。ああ、ソリューションは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}を使用してカスタムプロパティを見つけることです。その後、期待どおりに動作します。

関連する問題