我尝试了很多方法来在程序中获取窗口的静态引用。我需要在运行时从不同的类访问其所有成员,因此需要静态引用。
我想要的是类似的东西Program.Window1
, where Core
是静态的并且MyWindow
是其静态成员之一。
在 WinForms 中,我通常在 Program.cs 中声明静态表单,但这似乎不适用于 WPF 及其自定义“App.xaml”ApplicationDefinition。
我该怎么做?
注意:我已经尝试了多种方法:使用直接调用新窗口(即Program.Window1 = new Window1()
)将不起作用,因为我收到一些线程无效异常。据我所知,到目前为止,只有 ApplicationDefinitions 可以在 WPF 中启动窗口。
每当我尝试“通过代码”而不是通过默认的 XAML ApplicationDefinition 的 StartupUri 创建窗口时,都会出现以下异常:
调用线程必须是 STA,因为许多 UI 组件都需要它。
创建一个可以包含窗口对象的静态类,然后在创建窗口时将其自身传递给静态类,从此静态类可以将窗口对象分发给感兴趣的各方,即使窗口对象本身是不是静态的。像这样的东西。您的表单不需要是静态的,您只需要一个静态的地方来保存表单对象。
public class Core
{
internal static MyWindowClass m_Wnd = null;
// call this when your non-static form is created
//
public static void SetWnd(MyWindowClass wnd)
{
m_Wnd = wnd;
}
public static MyWindow { get { return m_Wnd; } }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)