Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MessageBox的大小_C#_Wpf_Messagebox - Fatal编程技术网

C# MessageBox的大小

C# MessageBox的大小,c#,wpf,messagebox,C#,Wpf,Messagebox,.NET的MessageBox如何确定其大小与屏幕分辨率的关系 我正在为WPF应用程序编写一个稍微灵活一些的对话框窗口。窗口的布局在网格中展开: +----------------- | auto: Header // A header for the dialog. +----------------- | auto: Content // can be any FrameworkElement. +----------------- | auto: BottomPanel

.NET的
MessageBox
如何确定其大小与屏幕分辨率的关系

我正在为WPF应用程序编写一个稍微灵活一些的对话框窗口。窗口的布局在网格中展开:

+-----------------
| auto: Header      // A header for the dialog.
+-----------------
| auto: Content     // can be any FrameworkElement.
+-----------------
| auto: BottomPanel // With buttons <OK>, <Cancel>, <Delete>, etc. 
+-----------------

PPS:要确定显示对话框的屏幕,请选择
MessageDialog
窗口的
所有者所在的屏幕。作为回退,将使用第一个(主)屏幕。

您将找不到任何类似的记录,但是在Windows Vista中,消息框算法通过选择以下最小值来确定消息框的宽度,从而生成适合工作区域的消息框:

  • 最长线条的宽度
  • 278数据链路单元()
  • 工作区宽度的5/8
  • 工作区宽度的3/4
  • 工作区宽度的7/8
(我解释这意味着(例如)宽度将是工作区域宽度的5/8,除非这导致对话框高于工作区域的高度,在这种情况下,它将使用更宽的宽度)

这至少可以为您提供一些指导,让您可以选择看起来不太合适的最大宽度

据我所知,消息框没有最大高度,但我想类似的算法会很好地工作


如果你的对话框真的非常大,那么你可能需要考虑让对话框变得可调整/最大化。(我不喜欢显示列表过大但不允许您将对话框调整为更合适大小的对话框)。

这不是对您的问题的回答,但您可能有兴趣查看它,它可以让您轻松访问Vista+TaskDialog,它基本上类似于更灵活、更美观的MessageBox。虽然只能在Vista+上使用,但它可能会满足您的需要。这始终是任何试图取代MessageBox的人的绊脚石。它的自动缩放对于您自己实现来说是非常重要的。不要把它当作一个消息框,开始把它当作一个普通的窗口。滚动条和允许用户调整窗口大小是正常的。感谢Kragen的回答和Hans Passant的评论,我想出了一个解决方案:窗口的最大宽度和高度是屏幕宽度的5/8,高度的2/3。内容被包装在一个“ScrollViewer”中,如果内容太大,用户可以通过它滚动内容。这并不是我想要的,但我不想为了得到消息窗口的大小而编写大量代码来多次计算布局。对于我自己的标准windows窗体应用程序,我刚刚编写了一个可调整大小的MessageBox替代程序。你可以在这里下载它,并像标准的信息框一样使用它:问候,JörgThank@jreichert,谢谢你的建议。为什么是最后3个?其中最小的总是工作区宽度的5/8,除非宽度为负值。@Jakob我也发现这个措辞很奇怪,但我认为这是为了解释对话框可能最终对于工作区来说太高的可能性,在这种情况下,将选择更宽的对话框宽度。
// 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(...)
 */