c# - 如何获取对 WPF 窗口的静态引用?

标签 c# wpf static reference window

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

我想要的是类似 Program.Window1 的东西,其中 Core 是静态的,MyWindow 是它的静态成员之一.

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

我该怎么做?

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

每当我尝试“通过代码”而不是默认的 XAML ApplicationDefinition 的 StartupUri 创建窗口时,就会出现异常:

The calling thread must be STA, because many UI components require this.

最佳答案

创建一个可以包含窗口对象的静态类,然后在创建窗口时,将其自身传递给静态类,这样静态类就可以将窗口对象传递给感兴趣的人,即使窗口对象本身不是静态的。像这样的东西。你的表单不需要是静态的,你只需要一个静态的地方来保存表单对象。

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; } }
}

关于c# - 如何获取对 WPF 窗口的静态引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2259171/

相关文章:

c# - 如何重用其他项目的 .cs 文件

c# - 查找在列表中恰好出现两次的重复项

wpf - 如何关闭(带有复选框)使用 CollectionViewSource 实现的 WPF/MVVM DataGrid 分组?

c# - c# wpf 动画结束时运行 Action

html - 编码的 UI - 无法识别 Wpfbrowser 上的 html 控件

objective-c - 不在静态 UIViewController 子类中调用 [super dealloc]

c# - 在迁移期间将标识设置为先前创建的列

C++ 静态存储持续时间对象在 main() 之前初始化

class - 如何在 Powershell 5 类中声明静态成员?

c# - Windows 应用拼写检查