.NET的MessageBox如何确定其相对于显示它的屏幕分辨率的大小?
我正在为WPF应用程序编写一个稍微灵活的对话窗口.窗口的布局布局在网格中:
+----------------- | auto: Header // A header for the dialog. +----------------- | auto: Content // can be any FrameworkElement. +----------------- | auto: BottomPanel // With buttons <OK>,<Cancel>,<Delete>,etc. +-----------------
Contentcell可能非常大.在我的一个用例中,用户想要从列表中删除x个元素.然后在确认对话框中列出元素.如果有很多(比方说50个)元素,那么窗口可能会变得太大 – 对我来说太大了.
我想要的是一个函数,它以模仿微软自己的MessageBoxdialog的方式从当前屏幕确定对话框窗口的MaxHeight和MaxWidth属性.
// MessageDialog class public static object Show( Window owner,FrameworkElement content,string title,string header,params MessageDialogButton[] buttons ); /* The MessageDialogButton class has the following properties: * Text,ReturnValue,IsDefault,IsCancel. The class produces * System.Windows.Controls.Button objects that when clicked * return the value of their ReturnValue property--which is then * returned by MessageDialog::Show(...) */
PPS:要确定显示对话框的屏幕,MessageDialog窗口所有者所在的屏幕.作为后备,使用第一个(主)屏幕.
解决方法
您不会发现任何类似的文档,但是Windows Vista中的
according to Raymond消息框算法通过选择以下最小的一个来确定消息框的宽度,从而产生适合工作区域的框:
>最长线的宽度
> 278 DLU(Dialog units)
>工作区宽度的5/8
>工作区宽度的3/4
>工作区宽度的7/8
(我把这意味着(例如)宽度将是工作区宽度的5/8,除非这导致对话框高于工作区的高度,在这种情况下它会使用更宽的宽度).
这至少应该为您提供一些选择最大宽度的指针,这些宽度看起来不合适.
据我所知,消息框没有最大高度,但我想类似的算法可以很好地工作.
如果您的对话框确实非常大,那么您可能需要考虑使对话框可调整大小/最大化. (我不喜欢显示太大但不允许您将对话框调整到更合适大小的列表的对话框的粉丝).