【问题标题】:Stop a Storyboard from another Window从另一个窗口停止情节提要
【发布时间】:2011-11-16 22:18:02
【问题描述】:

我在 MainWindow 中有一个情节提要如下:

    <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 时,我想用按钮控件停止情节提要[“OnMouseLeftButtonDown2”],你有什么建议如何完成这一步吗?

塔恩斯克非常值得您关注,

干杯

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    您好,我想您想从新窗口中停止情节提要 - 对吧? 我会建议这样的事情:

    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
    • 也许你必须让当前的调度员在闭包中,但我不这么认为

    【讨论】:

    • ,嗨,我尝试了你的建议,但是在第二个窗口(Window2)中,当我单击按钮停止情节提要时,什么也没发生。非常感谢
    • 嗨,您必须检查几件事:1)您是否在您的 Button-Click 事件中调用了 StopStoryboardAction 2)您可以调试并确保该操作被调用 3)情节提要是否停止当你在窗口 1 中调用 stop 时?
    • ,是的,我检查得很好,现在是正确的,我有点累了:D.非常感谢我们的帮助。
    【解决方案2】:

    相关帖子 - xamlcode behind

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 2014-11-23
      • 2020-08-06
      • 2013-10-26
      • 1970-01-01
      相关资源
      最近更新 更多