2

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

在 RC0 之前,我设置了 ContentPresenter 的 Foreground,给它一个 x:Name,并在 VisualStateManager 转换中引用它。

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

非常感谢您的帮助。

更新:

我可以解决一些带有边框的已删除属性的问题,但不能解决与字体/文本相关的问题,包括前景。

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

4

4 回答 4

2

Jesse Liberty有一篇文章处理这个问题。简而言之,这个想法是您不能,因为您将强制按钮中的任何内容具有特定的前景色,并且该决定应该留给内容本身。

无论如何,也许您可​​能想看看劫持依赖属性的概念,它使用另一个相同类型的属性来满足您的需求。这不是一个好的做法,但肯定会奏效。

于 2008-10-02T15:56:32.347 回答
1

只要按钮内容不复杂,用 TextBlock 替换 ContentPresenter 就可以很好地工作。我有一个示例,其中按钮内容具有图像和文本块。在这种情况下,不显示任何内容。将 ContentPresenter 替换为 ContentControl,您将获得 Foreground 属性。

<ControlTemplate TargetType="{x:Type ButtonBase}">
    <ContentControl Content="{TemplateBinding Content}" Foreground="{Binding Foreground}" />
</ControlTemplate>
于 2009-08-05T10:19:39.463 回答
0

在您的 ContentControl 周围放置一个边框,并使您的 VSM 适用于该边框控件。

于 2008-10-01T22:26:49.887 回答
0

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

如果您愿意将可以插入模板的可能内容类型限制为文本,那么它会很好地工作:

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

于 2009-08-25T18:30:24.883 回答