WPF主窗体单例模式可以通过以下步骤实现:
在App.xaml.cs文件中重写OnStartup方法,在该方法中创建一个MainWindow实例,并将其设置为应用程序的主窗口;
在MainWindow.xaml.cs文件中重写OnSourceInitialized方法,在该方法中获取当前窗口的句柄,并将其设置为单例模式;
在MainWindow.xaml.cs文件中重写OnClosed方法,在该方法中释放当前窗口的句柄,以便下次重新创建窗口时可以正常显示;
在App.xaml.cs文件中重写OnActivated方法,在该方法中检查当前窗口是否已经存在,如果存在则将其显示出来,如果不存在则创建一个新的窗口。
我有一个用户控件,用户控件被动态加载到主窗体(frm_Manage)里。我想当用户控件被点击后就清空主窗体里Grid控件里的所有子控件。private void lbl_MenuName_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){//frm_Manage为主窗体,Grid_MenuChildren为主窗体的一个控件var frm = (this.Parent as frm_Manage)frm.Grid_MenuChildren.Children.Clear()}上面这样写的话会报错:frm为null。------解决方案--------------------------------------------------------使用事件。主窗口响应事件,把值传给控件。------解决方案--------------------------------------------------------呃,你把UserControl放MainWindow里不就结了。WPF的话更建议用数据驱动的思想设计程序。------解决方案--------------------------------------------------------响应事件的方法比较简单。用户控件定义好了,在主窗体里完全可以把用户控件当作一个按钮来用。// #用户控件// 定义public event EventHandler click// 被点击时,传递点击事件给外部if (null != click) click(null, null)// #主窗体// 用户控件的点击事件userControl.click += (us, ue) =>{ MessageBox.Show("用户控件被点击")}------解决方案--------------------------------------------------------实在不行你就给usercontrol写个SetParent的方法 初始化的时候调用下 把父窗口传递进去 然后用就是了这样基本上可以解决你的问题 但是不是推荐的做法欢迎分享,转载请注明来源:内存溢出
评论列表(0条)