【问题标题】:XAML : have the current color of an element in a storyboardXAML:在情节提要中具有元素的当前颜色
【发布时间】:2012-12-05 09:59:39
【问题描述】:

是否可以获取元素的当前颜色

<UserControl.Resources>
<Storyboard x:Name="SBFade">
    <ColorAnimationUsingKeyFrames x:Name="keyframes" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="LayoutRoot">
        <EasingColorKeyFrame KeyTime="0" Value="#FF681D1D"/>
        <EasingColorKeyFrame KeyTime="0:0:0.6" Value="Gray"/>
    </ColorAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="#808080" >.....</Grid>

在值为#FF681D1D的那一行,我想要Grid的当前背景颜色(这个颜色可以在运行时改变.. 感谢您的帮助!

【问题讨论】:

  • 您可以尝试使用“透明”而不是获取背景颜色,看看是否得到相同的效果。
  • 这是个好主意!但是当我尝试这个时,网格对灰色是透明的。我正在寻找从实际颜色到灰色的渐变
  • 您尝试过 Value="{Binding Background, ElementName=LayoutRoot} 吗?
  • 这是个好主意,但奇怪的是,它是黑色效果!?
  • 是否可以在第一个 EasingColorKeyFrame 中添加 x:NAme="StartColor" 并且在 C# 中可以访问该值?

标签: windows-phone-7 xaml storyboard winrt-xaml


【解决方案1】:

在非关键帧动画中,省略“From”值会做你想要的。

类似:

<Storyboard x:Name="SBFade">
    <ColorAnimation x:Name="keyframes" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="LayoutRoot" To="Gray" Duration="0:0:0.6" />
</Storyboard>

或者,对于关键帧,如果您省略早期/第一个关键帧,您将获得相同的效果。使用 DiscreteColorKeyFrame 以外的任何内容(在指定时间跳转到指定颜色而不进行插值)将在颜色之间进行插值。

<Storyboard x:Name="SBFade">
    <ColorAnimationUsingKeyFrames x:Name="keyframes" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="LayoutRoot">
        <EasingColorKeyFrame KeyTime="0:0:0.6" Value="Gray"/>
    </ColorAnimationUsingKeyFrames>
</Storyboard>

这些与 msdn 示例 ColorAnimationColorAnimationUsingKeyFrames 非常相似(向下滚动到 xaml 示例)。

如果您想编写反向动画(从灰色不褪色到任何颜色),请在视图模型中保持所需的颜色,并绑定 To 属性(在非关键帧动画的情况下)或 Value 属性(在关键帧动画的情况下)到视图模型的该属性。

【讨论】:

  • 谢谢!!只是省略了“发件人”,这很好!
猜你喜欢
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2010-12-11
  • 2014-02-14
相关资源
最近更新 更多