目标是创建一个包含多个WPF窗口的对象,这些窗口代表一个应始终一起显示的单元,每个Window
保留自己的个人责任 - 比如选择布局在屏幕X ......
现在因为WPF是一个单窗口架构,我想将这个Windows列表包装在一个Window
对象中,以便它可以设置为StartupUri,例如
Show()
启动中手动Window
每个Application
,但这不是重点 - 我需要一组粘在一起的窗口,我可以轻松地调用它们在我的代码库中的任何地方,知道我有一个关注链接的类。我不知道如何实现这样的适配器,我试图覆盖BeginInit
,但根本没有被调用。
public class MultiWindow : Window
{
private readonly IList<Window> _windows = new List<Window>();
public void Register(Window window)
{
_windows.Add(window);
}
public override void BeginInit()
{
foreach (var w in _windows)
w.Show();
// base.BeginInit();
}
}
我不太了解Window
生命周期,无论如何我可以取消初始化并显示已注册窗口的列表吗?
答案 0 :(得分:1)
我相信startupuri会允许你在应用程序启动时打开一个窗口 如果要在应用程序启动时打开窗口,可以这样做。
有App.xaml文件,请转到App.xaml.cs文件。
请尝试......以下
从Application继承的App类。您可以覆盖OnStartup()来自定义应用程序,说明时间。
public partial class App : Application
{
private readonly IList<Window> _windows = new List<Window>();
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// Add windows you want to open here.
foreach (var w in _windows)
{
w.Show();
}
}
我不确定这是你想要的。我希望这有帮助。
答案 1 :(得分:1)
我找到了一种方法来实现它,这是通过使我的所有窗口子类BaseWindow
,对于普通的单Window
个对象和实际包含多个窗口的Window
对象。
.Show()
时,它会显示一个窗口或多个窗口,具体取决于子类中封装的内容。public class BaseWindow : Window
{
// Hide default implementation and call BaseShow instead
public new void Show()
{
BaseShow();
}
protected virtual void BaseShow()
{
base.Show();
}
// ... abstract away any additional Window methods and properties required
}
public class MultiWindow : BaseWindow
{
private readonly IList<Window> _windows = new List<Window>();
public void Register(Window window)
{
_windows.Add(window);
}
protected override void BaseShow()
{
foreach (var w in _windows)
w.Show();
}
}
// First Window object instantiated becomes WPF MainWindow
var multiWindow = new MultiWindow();
multiWindow.Register(new WindowA());
multiWindow.Register(new WindowB());
// Cast down to BaseWindow in order to call the overriden member
var baseWindow = (BaseWindow)Application.Current.MainWindow;
// Show WindowA and WindowB
baseWindow.Show();
P.S。我希望Microsoft在整个.NET中使用接口,使用IWindow接口而不是具体的Window类将提供更多功能,在这种情况下,也易于实现。