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

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

  #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)

目录
相关文章
|
6月前
|
C# Windows
2000条你应知的WPF小姿势 基础篇<74-77 WPF 多窗口Tips>
2000条你应知的WPF小姿势 基础篇<74-77 WPF 多窗口Tips>
57 0
|
6月前
|
开发框架 .NET C#
2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>
2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>
30 0
|
6月前
|
C#
2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>
2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>
39 0
|
6月前
|
C#
2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
52 0
|
6月前
|
IDE C# 开发工具
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
31 0
|
6月前
|
C#
2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>
2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>
20 0
|
6月前
|
存储 开发框架 .NET
2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>
2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>
22 0
|
6月前
|
存储 安全 程序员
2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
16 0
2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
|
6月前
|
C# C++ Windows
2000条你应知的WPF小姿势 基础篇<28-33 WPF启动故事>
2000条你应知的WPF小姿势 基础篇<28-33 WPF启动故事>
34 0
|
6月前
|
程序员 C# C++
2000条你应知的WPF小姿势 基础篇<22-27 WPF生命周期, 基础类等>
2000条你应知的WPF小姿势 基础篇<22-27 WPF生命周期, 基础类等>
26 0