如何获得WPF窗口的静态引用?

Laz*_*zlo 8 c# wpf static window reference

我已经尝试了很多方法来获取我的程序中窗口的静态引用.我需要在运行时从不同的类访问其所有成员,因此需要静态引用.

我想拥有的是什么Program.Window1,Core静态的MyWindow是静态成员之一.

在WinForms中,我通常在Program.cs中声明我的静态表单,但这似乎不适用于WPF及其自定义的"App.xaml"ApplicationDefinition.

我该怎么做?

注意:我已经尝试了很多方法:使用直接调用新窗口(即Program.Window1 = new Window1())将不起作用,因为我得到一些线程无效异常.据我所知,到目前为止,只有ApplicationDefinitions可以在WPF中启动窗口.

每当我尝试按"代码"而不是默认的XAML ApplicationDefinition的StartupUri创建一个窗口时,这是个例外:

调用线程必须是STA,因为许多UI组件都需要这个.

Joh*_*ler 11

创建一个可以包含窗口对象的静态类,然后在创建窗口时,让它将自身传递给静态类,从那时起,静态类可以将窗口对象分发给感兴趣的各方,即使窗口对象本身是不是静止的.像这样的东西.您的表单不需要是静态的,您只需要一个静态的位置来保存表单对象.

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; } }
}
Run Code Online (Sandbox Code Playgroud)


Dev*_*per 5

试试这个((MainWindow)App.Current.Windows [0]).MainCanvas.