代码之家  ›  专栏  ›  技术社区  ›  Cyberherbalist

从情节提要设置背景属性

  •  1
  • Cyberherbalist  · 技术社区  · 15 年前

    在WindowsPhone7项目中,我在按钮背景上进行颜色动画,在一个范围内更改颜色。我希望在单击按钮时动画停止,并使按钮的背景色保持在单击按钮时的颜色上。为此,我有以下设置:

    <Button Height="72" HorizontalAlignment="Left" 
        Margin="135,48,0,0" Name="button1" VerticalAlignment="Top" Width="160" 
        Click="button1_Click">
        <Button.Resources>
            <Storyboard x:Name="colorStoryboard">
            <!-- Animate the background color of the canvas from red to green over 4 seconds. -->
            <ColorAnimation BeginTime="00:00:00" Storyboard.TargetName="button1" 
                Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"
                From="Red" To="Blue" Duration="0:0:4" />
            </Storyboard>
        </Button.Resources>
    </Button>
    

    点击事件编码为:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        colorStoryboard.Pause();
        Brush holdBrush = new SolidColorBrush();
        holdBrush = button1.Background;
        colorStoryboard.Stop();
        button1.Background = holdBrush;
    }
    

    我认为它是这样工作的:在Storyboard.pause()停止颜色的任何进一步更改后(stop方法使按钮返回到其默认背景颜色),我将背景的当前画笔保存到新的画笔holdBrush中,然后在执行stop()后,我尝试将按钮的background属性恢复到v当暂停发生时,使用holdcrush将其赋值。

    然而,情况并非如此。在上面的代码中,我已经确认了holdcrush的颜色与故事板暂停时按钮的颜色相同,但是在停止后,holdcrush现在有了默认颜色——实际上,它有颜色ffffff,这是按钮单击时的颜色。有什么想法吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Lukasz Madon    15 年前

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            colorStoryboard.Pause();
            var color = button1.Background.GetValue(SolidColorBrush.ColorProperty); 
            colorStoryboard.Stop();
            Dispatcher.BeginInvoke( () => button1.Background.SetValue(SolidColorBrush.ColorProperty,color)); 
        }
    

        2
  •  0
  •   AnthonyWJones    15 年前

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
        colorStoryboard.Pause(); 
        SolidColorBrush brush = (SolidColorBrush)button1.Background; 
        Color holdColor = brush.Color;
        colorStoryboard.Stop(); 
        brush.Color = holdColor; 
    }
    
    推荐文章