将控件绑定到独立动画

时间:2009-08-07 15:10:40

标签: wpf animation

我是wpf的新手,我正在尝试学习一些东西。 我的问题是:我需要将我想要的所有内容绑定到循环动画......

示例:

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
    <Slider Visibility="Hidden"  Minimum="0" Maximum="100" Height="22" Margin="73,40,105,0" Name="Slider1" VerticalAlignment="Top" Value="0">
        <Slider.Triggers>
        <EventTrigger RoutedEvent="Slider.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation
                        Storyboard.TargetName="Slider1" 
                        Storyboard.TargetProperty="Value"
                        From="0" To="100" Duration="0:0:5" 
                        AutoReverse="True" RepeatBehavior="Forever" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
            </Slider.Triggers>
    </Slider>
    <Slider Minimum="0" Maximum="100" Height="22" Margin="72,98,106,0" Name="Slider2" VerticalAlignment="Top" Value="{Binding ElementName=Slider1, Path=Value}"/>
    <Button Width="{Binding ElementName=Slider1, Path=Value}"></Button>
</StackPanel>

Slider1被隐藏并充当Slider2和ButtonWidth的Source。 像一个独立的振荡器。 我需要一种方法来消除slider1并直接绑定到循环的独立动画。 有可能的? 在此先感谢:)

2 个答案:

答案 0 :(得分:1)

为什么不简单地为Slider2 Value设置动画,就像动画Slider1的值一样?您还可以为Button的宽度设置动画。我不知道你为什么首先需要Slider1。以下标记演示了如何删除Slider1并将动画用作资源:

<Window.Resources>
    <DoubleAnimation x:Key="ValueAnimation"
                         Storyboard.TargetProperty="Value"
                         From="0" To="100" Duration="0:0:5"
                         AutoReverse="True" RepeatBehavior="Forever" />
</Window.Resources>
<StackPanel>
    <Slider Minimum="0" Maximum="100" Height="22" Margin="72,98,106,0"
            Name="Slider2" VerticalAlignment="Top">
        <Slider.Triggers>
            <EventTrigger RoutedEvent="Slider.Loaded">
                <BeginStoryboard>
                    <Storyboard Storyboard.TargetName="Slider2">
                        <StaticResource ResourceKey="ValueAnimation"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Slider.Triggers>
    </Slider>
    <Button Width="{Binding ElementName=Slider2, Path=Value}"/>
</StackPanel>

您可以从ValueAnimation中删除 TargetProperty 并指定每个动画。这将允许您对Button.Width和Slider.Value使用单个动画。

答案 1 :(得分:0)

感谢您的回答:)

  

为什么不像Slider1的动画一样动画Slider2值?

因为我需要集中动画值以在多个对象(不仅是另一个滑块)上共享它,这样,我只能在一个地方编辑值:)

谢谢你的例子很合适:)