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,你仍可以与主窗体进行交互。

  2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>

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

  2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>

  

  #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 周期,希望能多多关注~

2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>

上一篇:C#自定义设计器——文件名选择编辑器


下一篇:win7或windows server 2008 R2 被远程登录日志记录 系统日志