从另一个窗口停止故事板

本文关键字:故事 另一个 窗口 | 更新日期: 2023-09-27 18:08:38

我在MainWindow中有一个Storyboard如下:

    <Storyboard x:Key="OnMouseLeftButtonDown1">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)"  RepeatBehavior="Forever" DecelerationRatio="1" Storyboard.TargetName="ellipse">
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
            <EasingDoubleKeyFrame KeyTime="0:0:2" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>

在同一个窗口中,我有一个按钮来调用这个StoryBoard,同时打开一个新窗口,如下所示:

private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        Storyboard sb= this.Resources["OnMouseLeftButtonDown2"] as Storyboard;
                if (sb != null)
                    sb.Begin(this);
                Window2 win = new Window2();
                win.Show();
    }

现在,当它显示Window2我想停止storyboard["OnMouseLeftButtonDown2"]与一个按钮控制,你有任何建议如何工作这一步?

Tahnsk,非常感谢你的关注,

欢呼

从另一个窗口停止故事板

嗨,我想你是想在新窗口中停止Storyboard吧?我建议这样做:

private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        Storyboard sb= this.Resources["OnMouseLeftButtonDown2"] as Storyboard;
                if (sb != null)
                    sb.Begin(this);
                Window2 win = new Window2();
                win.StopStoryboardAction = () => sb.Stop();
                win.Show();
    }

给你的新窗口一个公共属性:

public Action StopStoryboardAction { get; set; }

在你的新窗口中调用

if (StopStoryboardAction != null) StopStoryboardAction();

这样你可以得到更少的依赖。

PS:

  • 我想你也可以写win.StopStoryboardAction = sb.Stop
  • 也许你需要在闭包中获取当前调度程序但我不这么认为

相关文章-

StoryBoard board = (StoryBoard)this.FindResource("OnMouseLeftButtonDown2"); 
board.stop();