动画自定义Button ControlTemplate前景

时间:2008-10-01 21:53:15

标签: .net silverlight silverlight-2-rc0

我想根据控件的状态更改/动画自定义按钮控件模板的Foreground属性。

Pre-RC0,我设置ContentPresenter的前景,给它一个x:Name,并在VisualStateManager过渡中引用它。

现在,ContentPresenter不再具有Foreground,因为它不再从Control继承。通常,我会在样式中设置Foreground,该样式应用于模板化控件。但我不能从VisualStateManager过渡/状态引用它。我也无法将其包装在具有Foreground属性集的TextBlock中,并且(编辑:)Border没有Foreground属性。

非常感谢帮助。

更新

我可以使用Border解决一些已删除属性的问题,但不能解决与字体/文本相关的问题,包括Foreground。

由于似乎不可能,在我的特定情况下,我能够用TextBlock替换ContentPresenter。

4 个答案:

答案 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)

我想出了一个针对这个问题的解决方案,类似于我刚才注意到的现有响应 -

如果您愿意将可插入模板的可能内容类型限制为文本,那么它将非常有效:

http://storypodders.com:8081/bodhiSoftware/node/14