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