zoukankan      html  css  js  c++  java
  • 2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>

      在正文开始之前需要介绍一个人: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]


      

      #78 Modal Dialog 和 Modeless Window

      Modal Dialog(模式窗口)是出现在该程序其他窗口之前的窗口,会阻止与其他窗口所以的互动,直至其关闭。最小化Modal Window也会最小化其余所有窗口。

      Modeless Window 即正常窗体,不会阻碍和其余窗口的互动,互不干涉。

      在实际应用中根据不同业务情况选择不同的窗口类型。

      下面例子中使用Window.Show和Window.ShowDialog方法来分别展示非模式窗口和模式窗口。

    private void btnModal_Click(object sender, RoutedEventArgs e)
    {
        ChildWindow win = new ChildWindow();
        win.Title = "Modal child - " + DateTime.Now.ToLongTimeString();
        win.ShowDialog();
    }
     
    private void btnModeless_Click(object sender, RoutedEventArgs e)
    {
        ChildWindow win = new ChildWindow();
        win.Title = "Modeless window - " + DateTime.Now.ToLongTimeString();
        win.Show();
    }  

      

      #79 Modal Dialog 和 Modeless Window举例(使用Windows自带Notepad)

      运行Windows自带的记事本就可以看到Modal Dialog和Modeless Dialog两种窗体形式。

      开启记事本后,输入一些文字,点击查找Edit|Find(Ctrl+F)。可以发现可以随意切换主窗体和搜索窗口的。所以Find Dialog是一个modeless dialog,你仍可以与主窗体进行交互。

      

      然后关闭Find窗口,点击File|Print(Ctrl+p)打开打印窗体。当打印窗体存在的时候,你可以发现你并不能切换到主窗体了。打印窗体就是一个模式窗口(Modal Dialog)。

      

      

      #80 Window Size and Location

      Window类拥有Left和Top属性来定位其在显示器中的位置。同时拥有Width和Height来指定窗口大小。赋值时使用的都是设备无关的单位(device independent units).

      假设你屏幕的DPI设置为96Dpi(dots per inch),WpF使用的单位是设备无关单位. 当你设定为96个单位的时候就是1 inch高.如果是其他Dpi,则遵循之下换算公式:

       # pixels = (# WPF Units) * (DPI / 96)

      这样Wpf程序显示在相同尺寸显示器中是相同的,无论是什么像素的密度。

      #81 WPF Units

      在Windows Form, 控件大小是以pixel来控制的。在WPF中,是以Wpf Units来控制的,设备无关。

      1 WPF unit = 1/96 inch.  也就是说在96DPI显示器上, 1 WPF Unit = 1 pixel.

      也就是说在120DPI的环境,1 WPF unit = 1.25 pixels.  (120/96)。

      在Windows Form中也可以实现类似的设备无关性,通过修改Form的AutoScaleMode属性,在WPF中,是自动的。

      公式:# pixels = (# WPF Units) * (DPI / 96)

      

      

      下一期会有更多关于WPF GUI和Application 周期,希望能多多关注~

  • 相关阅读:
    Docker系列——InfluxDB+Grafana+Jmeter性能监控平台搭建(一)
    Centos7网络配置——设置固定ip
    Fiddler扩展——自定义列数据&Tunnel to 443解决办法
    Jmeter二次开发——自定义函数
    net5学习笔记---依赖注入
    Spring Cloud Alibaba系列之分布式服务组件Dubbo
    Spring5.0源码学习系列之事务管理概述
    C# 无需管理员权限提示,操作C盘文件
    WPF 屏幕点击的设备类型
    WPF Button MouseDown事件
  • 原文地址:https://www.cnblogs.com/xfuture/p/4154890.html
Copyright © 2011-2022 走看看