如何在ControlTemplate触发器中使用自定义属性

Bru*_*eLH 7 wpf

我有一个派生自滑块的类,它使用自定义控件模板并具有一些添加的依赖项属性.我想基于新属性在模板中触发触发器.

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

<Slider.Template>
<ControlTemplate TargetType="{x:Type Slider}">
...
<Track.Thumb>
<Thumb x:Name="m_Thumb" Style="{StaticResource SliderThumbStyle}" />
...
Run Code Online (Sandbox Code Playgroud)

我想添加一个看起来像这样的触发器:

<ControlTempate.Trigger>
<Trigger Property="ThumbIsVisible" Value="False">
<Setter TargetName="m_Thumb" Property="Visibility" Value="Collapsed" />
Run Code Online (Sandbox Code Playgroud)

马上我可以看到这不起作用,因为我将控件tempate的目标类型设置为Slider.但是,如果我改变它说:

<ControlTemplate TargetType="{x:Type local:myCustomSlider}">
Run Code Online (Sandbox Code Playgroud)

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

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

Bru*_*eLH 3

看起来有一个更简单的方法可以解决这个问题。

<ControlTemplate.Triggers>   
  <Trigger Property=local:CustomSlider.ThumbIsVisible" Value="False">     
    <Setter TargetName="m_Thumb" Property="Visibility" Value="Hidden" />
  </Trigger> 
</ControlTemplate.Triggers> 
Run Code Online (Sandbox Code Playgroud)

其中 local 是 CustomSlider 类的命名空间。