• 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}).
    ", 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,希望能多多关注~

  • 相关阅读:
    第4課 部屋に机といずがあらます。
    (转)三层结构设计与ERP部署规划
    多线程的一个问题(同步事件和等待句柄)转
    C#操作xml小结(转)
    再论Assembly Registration Tool (Regasm.exe)
    再论Type Library Importer (Tlbimp.exe)
    Blittable and NonBlittable Types
    再论Importing a Type Library as an Assembly
    .Net Remoting(基本操作) Part.2 (转)
    Monitor类示例(转)
  • 原文地址:https://www.cnblogs.com/xfuture/p/4029016.html
Copyright © 2020-2023  润新知