2012-02-28 92 views
7

我有一个从滑块派生的类,它使用自定义控件模板并具有一些添加的依赖项属性。我想根据新的属性触发模板中的触发器。如何在ControlTemplate触发器中使用自定义属性

例如,我有一个名为ThumbIsVisible的新的依赖属性,当它设置为false时,我只需要我的滑块的拇指部分为hiddin。我的控件模板的样子:

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

我想在一个触发器,它看起来像加:

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

马上蝙蝠我可以看到这是行不通的,因为我有控制tempate的目标类型设置为Slider。但是,如果我改变说:

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

然后我遇到了与控件不同的模板类型的问题。解决此问题的唯一方法是使用local:myCustomSlider作为类型而不是Slider来创建xaml。但是,这样做会导致Visual Studio的设计器和代码背后出现很多问题。

有谁知道是否有标准的方法来解决所有这些问题?作为一种解决方法,我尝试通过代码隐藏添加到模板的触发器中,但无法使其工作。

+2

添加解决方案作为答案并接受它,这样就不会像未答复一样。 – kevev22 2012-02-28 17:50:15

+0

我会尽快达到100声望或我的8小时新手自我回复限制已到。 – BruceLH 2012-02-28 19:19:51

回答

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 2014-09-02 13:22:04

+0

@Nayan:有点迟了,但我想这应该是'触发器'而不是'DataTrigger'。 – dotNET 2015-01-02 10:09:19

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}来查找自定义属性。之后,它完全按照预期工作。

相关问题