.NET 的
MessageBox
如何确定其相对于显示屏幕分辨率的大小?
我正在为 WPF 应用程序编写一个稍微灵活的对话框窗口。窗口的布局是在网格中布局的:
+-----------------
| auto: Header // A header for the dialog.
+-----------------
| auto: Content // can be any FrameworkElement.
+-----------------
| auto: BottomPanel // With buttons <OK>, <Cancel>, <Delete>, etc.
+-----------------
Content
单元格可能非常大。在我的一个用例中,用户想要从列表中删除 x 元素。然后,这些元素将在确认对话框中列出。如果有很多(假设超过 50 个)元素,窗口可能会变得很大——对于我来说太大了。
我想要的是一个函数,以模仿微软自己的
MaxHeight
对话框的方式从当前屏幕确定对话框窗口的MaxWidth
和MessageBox
属性。
PS:我使用以下
static
方法调用消息对话框:
// 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
窗口的Owner
所在的屏幕。作为后备,使用第一个(主)屏幕。
您不会找到任何类似的记录,但是根据 Raymond(过时的链接,此链接是最新的)在 Windows Vista 中,消息框算法通过选择最小的消息框来确定消息框的宽度以下结果产生了一个适合工作区域的盒子:
(我将此解释为(例如)宽度将为工作区域宽度的 5/8,除非这会导致对话框高于工作区域的高度,在这种情况下它将使用更宽的宽度)。
这至少应该为您提供一些关于选择看起来不合适的最大宽度的指导。
据我所知,消息框没有最大高度,但我想类似的算法会很好地工作。
如果您的对话框确实非常大,那么您可能需要考虑使对话框可调整大小/最大化。 (我不喜欢显示太大列表但不允许您将对话框调整为更合适大小的对话框。