【问题标题】:Animating a custom Button ControlTemplate Foreground动画自定义按钮 ControlTemplate 前景
【发布时间】:2010-09-14 16:00:41
【问题描述】:

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

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

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

非常感谢您的帮助。

更新:

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

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

【问题讨论】:

    标签: .net silverlight silverlight-2-rc0


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      <ControlTemplate TargetType="{x:Type ButtonBase}">
          <ContentControl Content="{TemplateBinding Content}" Foreground="{Binding Foreground}" />
      </ControlTemplate>
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-04-30
            • 2018-08-24
            • 2023-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多