你能从App.Xaml.cs中调用MainWindow.Xaml.cs中的函数吗?

时间:2011-04-07 13:39:03

标签: c# wpf method-call

这似乎可行,但出于某种原因,我没有采取正确的方法。我是C#和.NET的新手,所以我希望这不是一个荒谬的问题:)

2 个答案:

答案 0 :(得分:6)

不确定为什么要这样做。它似乎不是最好的设计,但如果不知道你在做什么的细节,我不能对此发表评论。以下是如何做到这一点:

在App.Xaml.cs中:

var main = App.Current.MainWindow as MainWindow; // If not a static method, this.MainWindow would work
main.MyFunction();

请注意,您必须在启动后执行此操作。如果您想在启动之前执行此操作,则需要创建MainWindow对象并将其分配给this.MainWindow

var window = new MainWindow();
this.MainWindow = window;

window.Show();

window.MyFunction();

答案 1 :(得分:2)

很高兴见到有人出发!坚持下去,你会发现语言很强大,最终你会看到他们打算用你编码的设计方法。

我只能解释一些你可能想要做这种事情的情况。

1)调用一些独立于窗口的函数:

如果你的代码不依赖于或引用你的MainWindow,也许你应该将它从MainWindow的代码文件中移出并放在其他地方?你可以拥有任意数量的.cs文件,所以要花时间整理一下。你以后会很高兴。

2)在加载后在窗口上执行一些初始化任务:

在窗口的代码中,在构造函数中的InitializeComponent()调用之后插入代码。 (这是没有返回类型的方法,它只是“public MainWindow(){”

请记住,当您需要传入某些内容时,可以向构造函数中添加参数。对于Visual Studio创建的默认无参数构造函数,没有什么不可思议的。您可以避免以这种方式创建大量复杂的代码。通常最好在窗口代码中进行初始化,而不是加载窗口,

3)在窗口内外获取一些简单数据

您是否学会了如何创建自定义属性?这真的很容易。