【问题标题】:Animate UserControl in WPF?WPF中的动画用户控件?
【发布时间】:2010-05-25 18:37:48
【问题描述】:

我有两个 xaml 文件,一个是 MainWindow.xaml,另一个是 userControl EditTaskView.xaml。 在 MainWindow.xaml 中,它由列表框组成,当双击列表框的任何项目时,它会显示来自 EditView 用户控件的其他窗口(编辑窗口)。每当双击列表框中的任何项目时,我都会尝试为此 userControl 设置动画。我在 userControl 中添加了一些动画,但是动画只运行一次。每当单击列表框中的任何项目时,如何让我的动画每次都运行?

MainWindow.xaml

 <ListBox x:Name="lstBxTask"   Style="{StaticResource ListBoxItems}" MouseDoubleClick="lstBxTask_MouseDoubleClick">
        <ListBox.ItemTemplate>               
            <DataTemplate>                    
                <StackPanel>
                    <Rectangle Style="{StaticResource LineBetweenListBox}"/>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Taskname}"  Style="{StaticResource TextInListBox}"/>
                        <Button Name="btnDelete" Style="{StaticResource DeleteButton}" Click="btnDelete_Click"/>                                                      
                    </StackPanel>
                </StackPanel>                    
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>  
    <ToDoTask:EditTaskView x:Name="EditTask" Grid.Row="1" Grid.RowSpan="2" Grid.ColumnSpan="2" Visibility="Collapsed"/>

在MainWindow代码中,有鼠标双击事件,将EditTaskView的可见性变为Visible。

建议?

【问题讨论】:

    标签: wpf xaml animation user-controls


    【解决方案1】:

    你还没有向我们展示你的动画。通常动画确实在每次触发事件时播放:

       <UserControl.Resources>
        <Storyboard x:Key="Storyboard1">
            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="LayoutRoot">
                <EasingColorKeyFrame KeyTime="0" Value="#FFB62A2A"/>
                <EasingColorKeyFrame KeyTime="0:0:4" Value="#FF2A32B6"/>
            </ColorAnimationUsingKeyFrames>
        </Storyboard>
    </UserControl.Resources>
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="Control.MouseDoubleClick">
            <BeginStoryboard Storyboard="{StaticResource Storyboard1}"/>
        </EventTrigger>
    </UserControl.Triggers>
    

    【讨论】:

      【解决方案2】:

      感谢 bitbonk,你的代码真的很有帮助。

      我想我知道我的问题是什么。我将 EventTrigger 作为 FrameworkElement.Loaded 而不是 Control.MouseDoubleClick。

      反正代码是这样的:

      <Storyboard x:Key="AnimateEditView">
              <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="EditTask">
                  <EasingThicknessKeyFrame KeyTime="0" Value="0">
                      <EasingThicknessKeyFrame.EasingFunction>
                          <ExponentialEase EasingMode="EaseOut"/>
                      </EasingThicknessKeyFrame.EasingFunction>
                  </EasingThicknessKeyFrame>
                  <EasingThicknessKeyFrame KeyTime="0:0:1.6" Value="0"/>
              </ThicknessAnimationUsingKeyFrames>
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="EditTask">
                  <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                  <EasingDoubleKeyFrame KeyTime="0:0:1.6" Value="1"/>
              </DoubleAnimationUsingKeyFrames>
          </Storyboard>
      
      <Window.Triggers>
              <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                  <BeginStoryboard Storyboard="{StaticResource headerAnimation}"/>
                  <BeginStoryboard Storyboard="{StaticResource textBxAnimation}"/>
              </EventTrigger>
              <EventTrigger RoutedEvent="Control.MouseDoubleClick">
                  <BeginStoryboard Storyboard="{StaticResource AnimateEditView}"/>
              </EventTrigger>
          </Window.Triggers>
      

      【讨论】:

        猜你喜欢
        • 2011-05-20
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 2013-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-21
        相关资源
        最近更新 更多