【问题标题】:MainWindow_Loaded isn't triggered on my WPF ApplicationMainWindow_Loaded 未在我的 WPF 应用程序上触发
【发布时间】:2011-11-13 00:00:23
【问题描述】:

我目前正在关注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 定义,以演示构造函数的工作原理。

我的MainWindow.xaml 中还有一个TextBlock,名为Output,我正在尝试在代码的最后一行更新它。

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

但是,这会使应用程序停止工作。我的问题是什么问题?

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

谢谢。

【问题讨论】:

  • 你订阅window的Loaded事件吗...?

标签: c# wpf visual-studio-2010


【解决方案1】:

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

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

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

【讨论】:

  • 我是 C# 和 VS2010 的新手,您能指导我了解一下吗?
  • 打开 MainWindow.xaml(不是 MainWindow.xaml.cs),点击窗口(确保你没有选中其中一个控件),打开属性框(我相信 F4 会这样做),单击属性框中的事件选项卡,找到已加载并确保已映射到 MainWindow_Loaded(如果它是空白的,您应该能够选择您已经存在的)。
  • 感谢您的回复。一旦我有了关键字,我就可以用一些 google foo 找到msdn.microsoft.com/en-us/library/ms366768(v=vs.80).aspx。既然有几个正确的答案,我会选择你的作为解决方案,因为你首先回答了。
  • 就是这样!我不知道为什么当我第一次双击 Loaded 事件的文本输入时它没有保留我的Window_Loaded。当我在它为空的情况下双击时,它创建了一个新的Window_Loaded_1 方法,因此将文本框的内容替换为Window_Loaded,然后双击以确保它找到了它。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    XAML:

    <Window ... Loaded="MainWindow_Loaded">
    

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

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

    【讨论】:

      【解决方案4】:

      我的 MainWindow.xaml 中缺少 Loaded="Window_Loaded"。您可能会在设计器视图下方的 xaml 中的第 8 行看到它。我还在 WPF 中将 Pluralsight 程序用于许多不同的事情。 Dispatcher 和 backgroundWorker 对于重负载的 WPF 应用程序(例如 PLC)都是必不可少的。 UI 的基于事件的任务和委托与窗口相同。 Loaded 与 on_click 事件完全相同,只是在加载时触发。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-17
          • 1970-01-01
          • 2020-11-03
          • 2018-04-30
          • 2018-04-15
          • 2017-08-09
          • 1970-01-01
          • 2016-01-30
          相关资源
          最近更新 更多