问题背景描述
使用各种API或接口时,我们常常需要获取到当前MainWindow、AppWindow、WindowHandle、WindowID等的实例。
问题分析
分析发现,四个实例只需要获取到MainWindow的实例即可都通过API获取到。而MainWindow默认在App类中实例化,故在App初始化或App属性中即可获取其实例。
private Window m_window;
以上是App中定义的m_window变量。它在OnLaunched事件中即被赋值。故我们可以直接把它的访问级别提升为public即实现全局访问。
解决方案
将App中m_window的定义修改为:
public Window m_window;
即可获取到以上所有实例:
MainWindow = (App.Current as App).m_window;
MainWindow_Handle = WinRT.Interop.WindowNative.GetWindowHandle(MainWindow);
MainWindow_ID = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(MainWindow_Handle);
AppWindow = AppWindow.GetFromWindowId(MainWindow_ID);
总结 & 收获
通过访问MainWindow实例,即轻松获取所有欲求实例。但思考后,认为此方法仍不太完美,待优化。