我的WPF应用程序未触发MainWindow_Loaded

时间:2011-11-13 00:00:23

标签: c# wpf visual-studio-2010

我目前正在关注Pluralsight C# Fundamentals: Part 1并在Classes and Objects部分,视频指示我在Visual Studio中创建新的WPF应用程序并填写代码。这导致以下结果。

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            Employee e1 = new Employee("Ash");

            Employee e2 = new Employee("Lee");

            Output.Text = e1.Name + "" + e2.Name;
        }
    }
}

Employee基本上是一个虚拟类,它已使用单个实例变量Name定义,以演示构造函数的工作方式。

我的TextBlock中还有一个名为MainWindow.xaml的{​​{1}}我试图在代码的最后一行更新。

最初我在构造函数Output中包含MainWindow_Loaded中的代码,教程说这是不好的做法,它应该看起来像我的第一个代码段。

然而,这会阻止应用程序正常工作。我的问题是什么问题?

教程是否过时了?我运行的是错误的版本吗?它在Beta中有变化吗?

感谢。

5 个答案:

答案 0 :(得分:26)

确保Loaded事件映射到MainWindow的XAML中的MainWindow_Loaded。

编辑:将我的评论移到答案中,因为它似乎更有帮助:

打开MainWindow.xaml(不是MainWindow.xaml.cs),单击窗口(确保没有选择其中一个控件),打开属性框(我相信F4会这样做),点击在属性框的事件选项卡上,找到已加载并确保已映射到MainWindow_Loaded(如果它是空白的,您应该能够选择已存在的那个)

答案 1 :(得分:8)

如果您想以编程方式执行此操作,可以使用:

public MainWindow()
{
    Loaded += MainWindow_Loaded
    InitializeComponent();
}

答案 2 :(得分:6)

您可能错过了对Loaded事件的实际订阅,您可以通过两种方式解决此问题:

XAML:

<Window ... Loaded="MainWindow_Loaded">

代码背后,例如。在构造函数中:

public MainWindow()
{
    InitializeComponent();
    Loaded += MainWindow_Loaded;
}

答案 3 :(得分:0)

我缺少Loaded =&#34; Window_Loaded&#34;在我的MainWindow.xaml中。您可能会在设计器视图下方的xaml中的第8行看到它。我也在WPF中使用Pluralsight程序来处理许多不同的事情。 Dispatcher和backgroundWorker对于重载WPF应用程序都很重要,就像PLC一样。 UI的基于事件的任务和委托对于窗口是相同的。 Loaded与on_click事件完全一样,除了加载火灾。

答案 4 :(得分:0)

这是一种边缘情况。但是你们当中的一个人可能和我一样“具有创造力” ...如果您有WPF类的构造函数,则会意外忽略对InitializeComponent()的调用,这将导致Windows_Load事件停止工作。