我想根据控件的状态更改/动画自定义按钮控件模板的Foreground属性。
Pre-RC0,我设置ContentPresenter的前景,给它一个x:Name,并在VisualStateManager过渡中引用它。
现在,ContentPresenter不再具有Foreground,因为它不再从Control继承。通常,我会在样式中设置Foreground,该样式应用于模板化控件。但我不能从VisualStateManager过渡/状态引用它。我也无法将其包装在具有Foreground属性集的TextBlock中,并且(编辑:)Border没有Foreground属性。
非常感谢帮助。
我可以使用Border解决一些已删除属性的问题,但不能解决与字体/文本相关的问题,包括Foreground。
由于似乎不可能,在我的特定情况下,我能够用TextBlock替换ContentPresenter。
答案 0 :(得分:2)
有post from Jesse Liberty处理此问题。简而言之,这个想法是你不能,因为你会强迫按钮中的任何内容具有特定的前景色,并且该决定应留给内容本身。
无论如何,也许你可能想看看劫持依赖属性的概念,它正在使用你想要的同一类型的另一个属性。这不是一个好习惯,但肯定会奏效。
答案 1 :(得分:1)
用TextBlock替换ContentPresenter就可以正常工作。我有一个示例,其中按钮内容具有图像和文本块。在这种情况下,不显示任何内容。用ContentControl替换ContentPresenter,可以恢复Foreground属性。
<ControlTemplate TargetType="{x:Type ButtonBase}">
<ContentControl Content="{TemplateBinding Content}" Foreground="{Binding Foreground}" />
</ControlTemplate>
答案 2 :(得分:0)
在ContentControl周围放置一个边框,让VSM适用于该边框控件。
答案 3 :(得分:0)
我想出了一个针对这个问题的解决方案,类似于我刚才注意到的现有响应 -
如果您愿意将可插入模板的可能内容类型限制为文本,那么它将非常有效: