2000条你应知的WPF小姿势 基础篇<74-77 WPF 多窗口Tips>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师。最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,000 Things You Should Know About WPF 。他以类似微博式的150字简短语言来每天更新一条WPF和C#重要又容易被遗忘的知识。很希望能够分享给大家。
本系列我不仅会翻译他的每一个tip,也会加入自己开发之中的看法和见解。本系列我希望自己也能和他一样坚持下来,每天的进步才能促成伟大。
在这里郑重说明.该系列是基于Sean Sexton先生的英文博客, Sean Sexton拥有全部版权和撤销权利。
前文可以翻阅本博客wpf标签的文章。查看往期
[小九的学堂,致力于以平凡的语言描述不平凡的技术。如要转载,请注明来源:小九的学堂。cnblogs.com/xfuture]
#74 重写Application类里的源生标准事件(OnXXX)
在Application类中,我们可以写关于Startup, Exit, SessionEnding等源生事件的处理方法(handler).
还有一种方法可以在这些事件触发的时候来加入逻辑 - 重写OnXXX方法(OnXXX指的是相应事件的处理方法)。这些方法是当事件触发时Application类会执行的源生方法。这样你可以仅仅在App.xaml.cs中重写该方法。
下面一个例子是当SessionEnding的时刻,重写了OnSessionEnding方法:
public partial class App : Application { protected override void OnSessionEnding(SessionEndingCancelEventArgs e) { // Always call method in base class, so that the event gets raised. base.OnSessionEnding(e); // Place your own SessionEnding logic here } }
#75 创建和展现第二窗口
在WPF程序运行时你可以创建除了MainWindow外的第二窗口。
步骤:项目中添加一个Window作为第二窗口。
代码中可以直接实例第二窗口并调用Show方法:
private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { AnotherWindow win = new AnotherWindow(); win.Show(); }
#76 Application的Windows属性列出当前所有Window
Application有一个属性叫Windows,可以获得当前Application中所有的窗口。
如下图,有两个button,一个是创建新的window,一个是展示所有的window信息。
CreateNewWindow button:
private void btnCreate_Click(object sender, System.Windows.RoutedEventArgs e) { AnotherWindow win = new AnotherWindow(); win.Title = DateTime.Now.ToLongTimeString(); win.Show(); }
Where Are the Windows?,列出所有的window:
private void btnWhere_Click(object sender, RoutedEventArgs e) { StringBuilder sb = new StringBuilder(); foreach (Window w in App.Current.Windows) { sb.AppendFormat("Window [{0}] is at ({1},{2}).\n", w.Title, w.Top, w.Left); } MessageBox.Show(sb.ToString(), "My Windows"); }
最终结果:
#77 Windows之间的父子关系
创建一个新的窗口并调用show方法来展现,该窗口是独立于其他窗口存在的。它可以最大化最小化并不影响其余窗体,也会在任务栏中有自己窗口一个图标。
Window w = new Window(); w.Title = DateTime.Now.ToLongTimeString(); w.Show();
Wpf支持窗口之间的父子关系。你可以设置Owner属性来设置窗口间的父子关系
Window w = new Window(); w.Title = string.Format("Child #{0}", this.OwnedWindows.Count + 1); w.Owner = this; w.Show();
窗口之间的父子关系可以归纳为:
1. 父窗口最小化时,所有子窗口均最小化。
2. 子窗口最小化时,父窗口并不会最小化。
3. 子窗口之间可以进行交互,他们是平级的。
4. 父窗口不会覆盖子窗口,即子窗口永远在父窗口之上。
5. 父窗口关闭会引起所有子窗口的关闭。
下一期会有更多关于WPF Dialog和Location,希望能多多关注~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?