我有一个从滑块派生的类,它使用一个自定义的控制模板,并有一些附加依赖属性。我想基于新的属性在模板中触发的触发器。
例如,我有一个名为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的目标类型设置为滑块这是不行的。但是,如果我改变地说:
<ControlTemplate TargetType="{x:Type local:myCustomSlider}">
然后,我遇到与模板类型从控制不同的问题。解决这个问题的唯一方法是使用本地创建XAML:myCustomSlider的类型,而不是滑块。但是,这样做会导致大量的与VisualStudio的设计师和代码背后的问题。
有谁知道是否有一个标准的方法来解决这一切?作为一种变通方法我试图通过后台代码添加到模板的触发器,但一直没能得到那个工作。
当然,这只是需要我张贴我的问题找到答案时,我花了两天时间首先寻找它后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}找到自定义属性。之后,它的工作原理完全符合市场预期。
它看起来像有解决这个问题的一个更简单的方法。
<ControlTemplate.Triggers>
<Trigger Property=local:CustomSlider.ThumbIsVisible" Value="False">
<Setter TargetName="m_Thumb" Property="Visibility" Value="Hidden" />
</Trigger>
</ControlTemplate.Triggers>
其中地方是CustomSlider类的命名空间。