【问题标题】:Storyboard.Completed Event Handler Preventing Code From ExecutingStoryboard.Completed 事件处理程序阻止代码执行
【发布时间】:2014-09-03 13:24:11
【问题描述】:

我正在尝试创建一个基于用户输入的动画模拟程序。当我尝试为 mystoryboard.completed 事件创建事件处理程序时遇到错误。我已经阅读了许多关于事件处理和情节提要的不同 API 文章和论坛帖子,但我似乎找不到错误的原因。

我的代码编译并显示窗口,但在我设置事件处理程序的行之后的任何内容都不会执行。我设置所有内容的主窗口如下所示。

public MainWindow()
        {
            InitializeComponent();
            titleTextBlock.Text = "MainWindow()";
            //this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            mainSystem = new BalanceSystem(3);
            leftBlock = new SystemComponents.Block(0, 100, 150, 100, mainSystem);
            rightBlock = new SystemComponents.Block(1, 100, 150, 100, mainSystem);
            balanceBeam = new SystemComponents.Bar(0, 0, 250, 150, 100, mainSystem);
            mainSystem.addComponent(leftBlock, leftWeight);
            mainSystem.addComponent(rightBlock, rightWeight);
            mainSystem.addComponent(balanceBeam, balanceBar);

            titleTextBlock.Text = "LOADED";
        }

“BalanceSystem”的构造函数是当事情开始出错的时候。它进入如下所示的构造函数:

public BalanceSystem(int count)
{
    componentCount = count;
    masterTimeline = new MovementTimeline(1);
}

输入“BalanceSystem”的构造函数后,它会转到我的自定义类“MovementTimeline”的构造函数。打破一切的是 masterStoryboard.Completed 的事件处理程序的创建和订阅。

class MovementTimeline
{
    private Storyboard masterStoryboard;
    private Duration systemDuration;

    public MovementTimeline(int totalTime)
    {
        systemDuration = new Duration(TimeSpan.FromSeconds(totalTime));
        masterStoryboard.Completed += new EventHandler(masterStoryboard_Completed);

    }

    void masterStoryboard_Completed(object sender, EventArgs e)
    {
        masterStoryboard.Children.Clear();
        //masterStoryboard.Completed -= masterStoryboard_Completed;
    }
 }

一旦编译器或程序到达创建新 EventHandler 的行,它就会停止执行我的其余代码并按原样加载窗口。我一生都无法弄清楚为什么会发生这种情况。

【问题讨论】:

  • 这是 MovementTimeLine 类的完整代码吗?
  • 因为在我看来,您添加了一个事件处理程序,而没有创建 StoryBoard 对象。
  • 不,它不是完整的 MovementTimeLine 类,其余的只是添加和删除动画的方法,与构造函数无关。哇,我完全错过了。非常感谢您的帮助,解决了我的问题。我应该如何将其标记为我的答案?
  • @Core-One,请添加答案,以便将此问题标记为已回答。
  • @Wired365,如果您有debugged your program,您可能会在一秒钟内找到答案。如果我愿意,我会点击链接了解如何操作。

标签: c# wpf storyboard eventhandler


【解决方案1】:

在我看来,您在添加事件处理程序时从未创建 StoryBoard 对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多