wpf 消息框大小

8yparm6h  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(97)

.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多个)元素,窗口会变得很大-对我来说太大了。
我想要的是一个函数,它以模仿微软自己的MessageBox对话框的方式,从当前屏幕确定对话框窗口的MaxHeightMaxWidth属性。
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所在的屏幕。作为后备,使用第一个(主)屏幕。

ncgqoxb0

ncgqoxb01#

你不会找到任何类似的文件,但是according to Raymond(过时的链接,这个link is more recent)在Windows Vista中,消息框算法通过选择以下最小值来确定消息框的宽度,从而产生适合工作区的框:

  • 最长线的宽度
  • 278 DLU(Dialog units
  • 工作区宽度的5/8
  • 工作区宽度的3/4
  • 工作区宽度的7/8

(我解释这意味着(例如)宽度将是工作区宽度的5/8,除非这导致对话框高于工作区的高度,在这种情况下,它将使用更宽的宽度)。
这至少应该给你给予一些指针,让你选择一个看起来不太合适的最大宽度。
据我所知,消息框没有最大高度,但我想类似的算法会很好地工作。
如果你的对话框真的很大,那么你可能想考虑让对话框可以调整大小/最大化。(我不喜欢那些显示列表太大但不允许你调整对话框大小的对话框)。

相关问题