VisualState,StoryBoard,即时更改颜色(无动画)

时间:2015-05-15 14:45:55

标签: c# wpf winrt-xaml

我觉得我的任务很简单(WinRT)。

我想要的是根据状态改变Rectangle的颜色。

我知道如何在"酷"动画的方式。

问题是我只想在没有任何动画的情况下立即更改颜色。

这是一种标准的,很酷的方式:

<VisualState x:Name="UnFocused">
    <Storyboard Duration="1">
        <ColorAnimation To="{ThemeResource LightGrayColor}"   
            Storyboard.TargetName="borderBrush"  
            Storyboard.TargetProperty="Color"/>
    </Storyboard>
</VisualState>  

我认为如果我将Duration更改为零,则更改将是即时的。

这种方式不起作用,颜色根本没有变化。

所以我尝试了#34; 0:0:0.1&#34;但它也没有改变颜色。

因此...

使用VisualState功能即时更改颜色的当前方法是什么?

谢谢: - )

2 个答案:

答案 0 :(得分:1)

我不知道WinRT是否有一些限制。至少我也期望零工作正常。但是你有更多的选择,仍然很酷:

<ObjectAnimationUsingKeyFrames Duration="00:00:00"
                                Storyboard.TargetName="borderBrush"
                                Storyboard.TargetProperty="Color">
    <DiscreteObjectKeyFrame KeyTime="00:00:00">
        <DiscreteObjectKeyFrame.Value>
            <SolidColorBrush Color="{ThemeResource LightGrayColor}"/>
        </DiscreteObjectKeyFrame.Value>
    </DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>

<ColorAnimationUsingKeyFrames Storyboard.TargetName="borderBrush"
                              Storyboard.TargetProperty="Color">
    <EasingColorKeyFrame KeyTime="0" 
                         Value="{ThemeResource LightGrayColor}" />
</ColorAnimationUsingKeyFrames>

答案 1 :(得分:0)

将@ Jacek-Wojcik的评论转变为答案:

不要在故事板上设置持续时间,而是在ColorAnimation上设置:

<VisualState x:Name="UnFocused">
  <Storyboard >
    <ColorAnimation Duration="0" To="{ThemeResource LightGrayColor}"   
        Storyboard.TargetName="borderBrush"  
        Storyboard.TargetProperty="Color"/>
 </Storyboard>
</VisualState>