gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:57:13 26 4
gpt4 key购买 nike

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

例如,我有一个名为 ThumbIsVisible 的新依赖属性,当它设置为 false 时,我只想隐藏 slider 的拇指部分。我的控件模板如下所示:

<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" />

马上我可以看到这不起作用,因为我将控制模板的目标类型设置为 Slider。但是,如果我将其更改为:
<ControlTemplate TargetType="{x:Type local:myCustomSlider}">

然后我遇到了与控件不同的模板类型的问题。解决此问题的唯一方法是使用 local:myCustomSlider 作为类型而不是 Slider 创建 xaml。但是,这样做会导致 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 Self} 来查找自定义属性。之后,它完全按预期工作。

关于wpf - 如何在 ControlTemplate 触发器中使用自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com