动画自定义按钮ControlTemplate前景
我想根据控件的状态更改/设置自定义按钮控件模板的Foreground属性的动画。
在RC0之前的版本中,我设置了ContentPresenter的前景,为其指定了x:Name,并在VisualStateManager过渡中对其进行了引用。
现在,ContentPresenter不再具有前景,因为它不再从Control继承。通常,我会在应用于模板控件的"样式"中设置"前景"。但是我无法从VisualStateManager的过渡/状态中引用它。我也不能将其包装在设置了Foreground属性的TextBlock中,并且(edit :) Border没有Foreground属性。
非常感谢帮助。
更新:
对于某些带边框的已删除属性,我可以解决问题,但与字体/文本有关的属性(包括前景)不能解决。
由于似乎不可能,因此在我的特殊情况下,我能够用TextBlock替换ContentPresenter。
解决方案
在ContentControl周围放置一个Border,并使VSM适用于该Border控件。
杰西·利伯蒂(Jesse Liberty)发表了一篇有关此问题的文章。简而言之,我们不能这样做,因为我们将迫使按钮中的任何内容都具有特定的前景色,而该决定应留给内容本身。
无论如何,也许我们可能想看一下劫持依赖项属性的概念,该属性使用了相同类型的另一个属性来满足需求。这不是一个好习惯,但是肯定会起作用。
只要按钮内容不复杂,用TextBlock替换ContentPresenter效果很好。我有一个示例,其中按钮内容包含一个图像和一个文本块。在这种情况下,将不会显示任何内容。用ContentControl替换ContentPresenter,我们将获得Foreground属性。
<ControlTemplate TargetType="{x:Type ButtonBase}"> <ContentControl Content="{TemplateBinding Content}" Foreground="{Binding Foreground}" /> </ControlTemplate>
我想出了一个解决此问题的方法,类似于我刚才注意到的现有答复-
如果我们愿意将可以插入模板的可能的内容类型限制为文本,那么它将很好地工作:
http://storypodders.com:8081/bodhiSoftware/node/14